範圍和遮蔽
您可以遮蔽變量,包括來自外部範圍以及來自同一範圍的變量:
fn main() { let a = 10; println!("before: {a}"); { let a = "hello"; println!("inner scope: {a}"); let a = true; println!("shadowed in inner scope: {a}"); } println!("after: {a}"); }
- 定義:遮蔽與可變數不同,因為在遮蔽之後,兩個變數的記憶體位置會同時存在。這兩者可以使用同一個名稱,具體取決於您在程式碼中使用的位置。
- 遮蔽變數可以有不同的型別。
- 遮蔽一開始看起來模糊不清,但對於保留
.unwrap()
之後的值很方便。 - 下列程式碼說明遮蔽範圍中不可變動的變數時,為何編譯器就是無法重複使用記憶體位置 (即使型別未變更也一樣)。
fn main() { let a = 1; let b = &a; let a = a + 1; println!("{a} {b}"); }