スコープとシャドーイング
変数束縛にはスコープがあり、_ブロック_内で生存するよう制約されます。ブロックとは、中括弧 {} で囲まれた文の集まりです。
fn main() { // この束縛は main 関数内で生存する let long_lived_binding = 1; // これはブロックであり、main 関数よりも小さいスコープを持つ { // この束縛はこのブロック内にのみ存在する let short_lived_binding = 2; println!("inner short: {}", short_lived_binding); } // ブロックの終わり // エラー!`short_lived_binding` はこのスコープには存在しない println!("outer short: {}", short_lived_binding); // FIXME ^ この行をコメントアウトする println!("outer long: {}", long_lived_binding); }
また、変数のシャドーイングも許可されています。
fn main() { let shadowed_binding = 1; { println!("before being shadowed: {}", shadowed_binding); // この束縛は外側の束縛を*シャドーイング*する let shadowed_binding = "abc"; println!("shadowed in inner block: {}", shadowed_binding); } println!("outside inner block: {}", shadowed_binding); // この束縛は前の束縛を*シャドーイング*する let shadowed_binding = 2; println!("shadowed in outer block: {}", shadowed_binding); }