스코프와 섀도잉
변수 바인딩은 스코프(범위)를 가지며, 블록 내에 거주하도록 제한됩니다. 블록은 중괄호 {}로 둘러싸인 문장들의 모음입니다.
fn main() {
// 이 바인딩은 메인 함수에 거주합니다
let long_lived_binding = 1;
// 이것은 블록이며, 메인 함수보다 더 작은 스코프를 가집니다
{
// 이 바인딩은 이 블록 내에만 존재합니다
let short_lived_binding = 2;
println!("내부 short: {}", short_lived_binding);
}
// 블록의 끝
// 에러! `short_lived_binding`은 이 스코프에 존재하지 않습니다
println!("외부 short: {}", short_lived_binding);
// FIXME ^ 이 줄을 주석 처리하세요
println!("외부 long: {}", long_lived_binding);
}
또한, 변수 섀도잉이 허용됩니다.
fn main() {
let shadowed_binding = 1;
{
println!("섀도잉 전: {}", shadowed_binding);
// 이 바인딩은 외부 바인딩을 *섀도잉*합니다
let shadowed_binding = "abc";
println!("내부 블록에서 섀도잉됨: {}", shadowed_binding);
}
println!("내부 블록 밖: {}", shadowed_binding);
// 이 바인딩은 이전 바인딩을 *섀도잉*합니다
let shadowed_binding = 2;
println!("외부 블록에서 섀도잉됨: {}", shadowed_binding);
}