Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

스코프와 섀도잉

변수 바인딩은 스코프(범위)를 가지며, 블록 내에 거주하도록 제한됩니다. 블록은 중괄호 {}로 둘러싸인 문장들의 모음입니다.

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