先須知識:
在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
let name = "Vicky"
let name = "Alicia"
在Rust中想要改變一個變數的型別,必須藉由重新宣告的方式做到。在同名變數且相同scope中,新同名變數會被使用而忽略舊同名變數值的這種機制就稱為shadow,意味著前一個變數被後一個變數給遮蔽了,新的變數佔據了前面同名變數的使用權,直到他們也被更新的同名變數遮蔽或離開scope。
let mut number = "10";
let number = number.parse();
println!(number) // 10 數字
可以看到JS是不允許在同個scope中重複宣告同名變數,而Rust則允許,在Rust的使用情境多半是用在想要改變某個變數的型別時,這樣的特性能讓我們不用重複宣告類同名變數。
舉個例子而言,你的程式碼想把物件轉成陣列的形式,你無需新增各something_object跟something_array變數,只需要用一個something變數即可。