superself

superself 关键字可以在路径中使用,以消除访问项目时的歧义,并避免不必要的路径硬编码。

fn function() {
    println!("调用了 `function()`");
}

mod cool {
    pub fn function() {
        println!("调用了 `cool::function()`");
    }
}

mod my {
    fn function() {
        println!("调用了 `my::function()`");
    }
    
    mod cool {
        pub fn function() {
            println!("调用了 `my::cool::function()`");
        }
    }
    
    pub fn indirect_call() {
        // 让我们从这个作用域访问所有名为 `function` 的函数!
        print!("调用了 `my::indirect_call()`,它\n> ");
        
        // `self` 关键字指的是当前模块作用域 - 在这里是 `my`。
        // 调用 `self::function()` 和直接调用 `function()` 都会
        // 得到相同的结果,因为它们指向同一个函数。
        self::function();
        function();
        
        // 我们也可以使用 `self` 来访问 `my` 内的另一个模块:
        self::cool::function();
        
        // `super` 关键字指的是父作用域(`my` 模块之外)。
        super::function();
        
        // 这将绑定到 *crate* 作用域中的 `cool::function`。
        // 在这种情况下,crate 作用域是最外层作用域。
        {
            use crate::cool::function as root_function;
            root_function();
        }
    }
}

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