Rust Shadowing VS 可變變數

更新於 發佈於 閱讀時間約 2 分鐘

先須知識:

  • 了解什麼是變數
  • 作用域scope

在Rust中,變數預設是不可變的

let name = "Zoe"; // 預設變數不可變

也就同於Javascript中的const,若想讓變數可變則需要在let後面加上mut關鍵字:

let mut name = "Vicky";
name = "Alicia";

看似rust的mut variable和javascript的let宣告的variable相同,但其實還有個不同之處:

rust變數不可改變型別,不可變的變數不可改,可變的變數也不可改
let mut space = "     "
space = space.len();

會出現錯誤:error[E0308]: mismatched types

Shadowing 遮蔽

let name = "Vicky"
let name = "Alicia"

在Rust中想要改變一個變數的型別,必須藉由重新宣告的方式做到。在同名變數且相同scope中,新同名變數會被使用而忽略舊同名變數值的這種機制就稱為shadow,意味著前一個變數被後一個變數給遮蔽了,新的變數佔據了前面同名變數的使用權,直到他們也被更新的同名變數遮蔽或離開scope。

let mut number = "10";
let number = number.parse();
println!(number) // 10 數字

跟js比較

javascript變數介紹

javascript變數介紹

可以看到JS是不允許在同個scope中重複宣告同名變數,而Rust則允許,在Rust的使用情境多半是用在想要改變某個變數的型別時,這樣的特性能讓我們不用重複宣告類同名變數。

舉個例子而言,你的程式碼想把物件轉成陣列的形式,你無需新增各something_object跟something_array變數,只需要用一個something變數即可。


avatar-img
4會員
10內容數
分享感情與生活的故事,期望我們都能在愛與被愛的路上感到幸福,並且在這個只有活一次的人生裡好好的活成自己喜歡的樣子
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
JHIHLEI LIN的沙龍 的其他內容
When you want to use your non-publish yet package in your other project, you need to do these: step 1 go to package and run : npm link packageNameHe
Magnetic tapes是一個自古就有的技術,至今還是有企業在使用,也有不斷在被改良中。 其特性:容量大低成本保存時間長,讓其仍有利用價值,在特定的情境下可做使用,比如可作為保存歷史資料使用,例如美國NASA,政府機構等等,或作為備份使用,不過要注意其讀寫速度很慢,比固態硬碟如HDD還慢上許多
第一天上班,你需要設定 SSH key,因為你將使用 SSH 來 clone 代碼 Repo。SSH 與 HTTP 的主要差別在於安全性和速度,而 SSH 比 HTTP 更加安全和快速。本篇文章的主要目的是介紹如何在一台電腦上使用 SSH 登入多個 GitHub 和 GitLab 帳戶。 不管你的
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
要談論DBMS,除了SQL語法之外,我們還必須了解底層是怎麼處理資料儲存的,也就是DBMS架構的底層Disk Space Management: Disk Space Management 提供API來讀/寫資料到硬碟,資料會以Page為傳輸單位,為什麼會一次要等到這麼大才寫入硬碟或一次要讀這麼
我對於自己開發的API會習慣性寫一份swagger文件方便前端串接,但因為這些文件都是存在我個人的swagger帳號,且會受限於免費版限制,再加上剛好跟PM在討論如何維護我們的文件,於是我就開始著手將swagger自己部署到公司管理後台。 這樣做的好處: (1)後端都可以編輯 (2)文件隸屬於
When you want to use your non-publish yet package in your other project, you need to do these: step 1 go to package and run : npm link packageNameHe
Magnetic tapes是一個自古就有的技術,至今還是有企業在使用,也有不斷在被改良中。 其特性:容量大低成本保存時間長,讓其仍有利用價值,在特定的情境下可做使用,比如可作為保存歷史資料使用,例如美國NASA,政府機構等等,或作為備份使用,不過要注意其讀寫速度很慢,比固態硬碟如HDD還慢上許多
第一天上班,你需要設定 SSH key,因為你將使用 SSH 來 clone 代碼 Repo。SSH 與 HTTP 的主要差別在於安全性和速度,而 SSH 比 HTTP 更加安全和快速。本篇文章的主要目的是介紹如何在一台電腦上使用 SSH 登入多個 GitHub 和 GitLab 帳戶。 不管你的
雖然lambda本身的概念就是主打無伺服器+各自獨立運行的function,但有時又不免其然的需要共用代碼,像是api可能都需要做權限驗證。 會有這方面的研究是因為公司正好要將app跟web共用的api搬到api gateway去處理,但我馬上就想到會有code reuse的問題,怎麼樣用可維護的
要談論DBMS,除了SQL語法之外,我們還必須了解底層是怎麼處理資料儲存的,也就是DBMS架構的底層Disk Space Management: Disk Space Management 提供API來讀/寫資料到硬碟,資料會以Page為傳輸單位,為什麼會一次要等到這麼大才寫入硬碟或一次要讀這麼
我對於自己開發的API會習慣性寫一份swagger文件方便前端串接,但因為這些文件都是存在我個人的swagger帳號,且會受限於免費版限制,再加上剛好跟PM在討論如何維護我們的文件,於是我就開始著手將swagger自己部署到公司管理後台。 這樣做的好處: (1)後端都可以編輯 (2)文件隸屬於
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
※ ES6 變數宣告介紹: 在ES6中,推薦使用let和const取代原有的var來宣告變數。 ※ var的特點: 勢力範圍(scope)只有兩種:function、global(全域部分)。 勢力範圍(scope)指的是宣告變數的範圍,能夠被有效的使用的範圍。 可以在宣告變數之前就使用。
前言: 雖然前面有些定義還沒有完整的解釋,但還是後面再說吧, 誰想一直看理論啊(摔本子)
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
函數式編程跟物件導向一個很大的差異在於對資料可變性(mutability)的態度,函數式編程不鼓勵修改原有的資料,有些語言甚至沒有修改的概念;而物件導向專注於狀態的改變,物件作為閉包就已經假設資料是可變的。這種對於可變性的態度注定物件導向比較容易得到關注,因為這個模型比較符合電腦底層的運作邏輯,而我
Thumbnail
在先前的型別文章中,我們曾經聊過 JavaScript 常用的一些型別,但針對布林這個型別,我們沒有做太多的解釋,原因在於布林值在 JavaScript 會有一個特殊的規則:自動轉型 。 自動轉型可說是讓 JavaScript 為弱型別、且難以管理的最重要的要素,接著就來讓我們來聊聊什麼是自動轉型
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
在 Solidity 中,constant 變量用於定義不可變的常數值。這些常數在合約的生命週期內不會改變,並且它們的值必須在宣告時設定。使用 constant 關鍵字可以節省 gas,因為它們在編譯時就已經被嵌入到字節碼中,不需要在運行時讀取存儲。 用法 定義常數: 常數變量必須在宣告時初始
※ ES6 變數宣告介紹: 在ES6中,推薦使用let和const取代原有的var來宣告變數。 ※ var的特點: 勢力範圍(scope)只有兩種:function、global(全域部分)。 勢力範圍(scope)指的是宣告變數的範圍,能夠被有效的使用的範圍。 可以在宣告變數之前就使用。
前言: 雖然前面有些定義還沒有完整的解釋,但還是後面再說吧, 誰想一直看理論啊(摔本子)
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
函數式編程跟物件導向一個很大的差異在於對資料可變性(mutability)的態度,函數式編程不鼓勵修改原有的資料,有些語言甚至沒有修改的概念;而物件導向專注於狀態的改變,物件作為閉包就已經假設資料是可變的。這種對於可變性的態度注定物件導向比較容易得到關注,因為這個模型比較符合電腦底層的運作邏輯,而我
Thumbnail
在先前的型別文章中,我們曾經聊過 JavaScript 常用的一些型別,但針對布林這個型別,我們沒有做太多的解釋,原因在於布林值在 JavaScript 會有一個特殊的規則:自動轉型 。 自動轉型可說是讓 JavaScript 為弱型別、且難以管理的最重要的要素,接著就來讓我們來聊聊什麼是自動轉型