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についても同じです。外側ではxは6になり、ブロックの中では12になります。ブロックが終わると内側のxは消え、残るのは外側の6です。