super 和 self
super 和 self 关键字可以在路径中使用,以消除访问项目时的歧义,并避免不必要的路径硬编码。
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();
}