Namaran

Code daily. Without assist.

2026-08-24

shadow.rs

fn main() {
    let x = 5;
    let x = x + 1;
    {
        let x = x * 2;
        println!("{}", x);
    }
    println!("{}", x);
}

これは何を出力するでしょうか?

Answer

12、続けて6。それぞれのlet x = ...は、既存の束縛を変更するのではなく新しい変数を作ってシャドーイングします — これは内側のブロックの中のxについても同じです。外側ではx6になり、ブロックの中では12になります。ブロックが終わると内側のxは消え、残るのは外側の6です。