9.4 super and self

superself 키워드를 사용하여 아이템에 접근할 때 모호성을 제거하고 불필요하게 경로를 하드코딩하는 것을 방지한다. The super and self keywords can be used in the path to remove ambiguity when accessing items and to prevent unnecessary hardcoding of paths.

fn function() {
    println!("called `function()`");
}

mod cool {
    pub fn function() {
        println!("called `cool::function()`");
    }
}

mod my {
    fn function() {
        println!("called `my::function()`");
    }

    mod cool {
        pub fn function() {
            println!("called `my::cool::function()`");
        }
    }

    pub fn indirect_call() {
        // 이 범위에서 `function`으로 이름지어진 모든 함수에 접근해보자!
        print!("called `my::indirect_call()`, that\n> ");

        // `self` 지시어는 현재의 모듈 범위를 참조한다. 
        // `self::function()`의 호출과 `function()`로 직접적인 호출은 
        // 이들이 동일 함수를 참조하므로 동일 결과를 낸다. 
        self::function();
        function();

        // 또한 `self`를 사용하여 `my` 내부의 다른 모듈에 접근할 수 있다.
        self::cool::function();

        // `super` 지시어는 상위 범위(`my` 모듈 외부)를 참조한다.
        super::function();

        // 이는 *crate* 범위 내에 있는 `cool::function`을 바인드 한다.
        // 이 경우 crate 범위는 최대 외곽의 범위이다.
        {
            use cool::function as root_function;
            root_function();
        }
    }
}

fn main() {
    my::indirect_call();
}

results matching ""

    No results matching ""