스코프와 섀도잉
변수 할당은 스코프를 가지며, 블록 안에서 존재하는 것으로 간주됩니다. 블록은
중괄호 {}
로 묶인 선언문 덩어리입니다.
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 ^ Comment out this line println!("outer long: {}", long_lived_binding); }
또, 변수 섀도잉도 가능합니다.
fn main() { let shadowed_binding = 1; { println!("before being shadowed: {}", shadowed_binding); // This binding *shadows* the outer one let shadowed_binding = "abc"; println!("shadowed in inner block: {}", shadowed_binding); } println!("outside inner block: {}", shadowed_binding); // This binding *shadows* the previous binding let shadowed_binding = 2; println!("shadowed in outer block: {}", shadowed_binding); }