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);
}