4.2 Scope and shadowing
변수 바인딩은 범위를 갖고, 유지되는 범위는 블록(block)으로 제약된다. 블록은 {}
괄호로 둘러쌓여 있는 문장의 모음이다. 또한, 변수 shadowing도 허용된다.
fn main() { // 이 바인딩은 메인 함수 내에 유효하다. let long_lived_binding = 1; // 이는 블럭으로 main 함수보다 작은 범위를 갖는다. { // 이 바인딩은 오직 이 블록 안에서만 존재한다. let short_lived_binding = 2; println!("inner short: {}", short_lived_binding); // 이 바인딩은 외부 변수의 *shadows* let long_lived_binding = 5_f32; println!("inner long: {}", long_lived_binding); } // 블럭 종료. // 에러! `short_lived_binding` 이 범위에는 존재치 않음. println!("outer short: {}", short_lived_binding); // FIXME ^ 이 줄을 주석 처리 하세요. println!("outer long: {}", long_lived_binding); // 이 바인딩 또한 이전 바인딩의 *shadows* let long_lived_binding = 'a'; println!("outer long: {}", long_lived_binding); }