範圍和遮蔽

您可以遮蔽變量,包括來自外部範圍以及來自同一範圍的變量:

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}");
}