Rust 编程中的 Super 和 Self 关键字
每当我们想要删除我们想要调用的函数的冗长乏味的导入路径时,无论是从同一个函数还是从不同的模块,我们都可以使用Rust中提供的super和self关键字。
当我们想要访问项目时,这些关键字有助于消除歧义,并防止对路径进行不必要的硬编码。
示例
考虑如下所示的一个简单示例:
fn function() {
println!("called `function()`");
}
mod cool {
pub fn function() {
println!("called `cool::function()`");
}
}
mod my {
fn function() {
println!("called `my::function()`");
}
mod cool {
ub fn function() {
println!("called `my::cool::function()`");
}
}
pub fn my_call() {
//让我们从此范围访问所有名为“function”的函数!
print!("called `my::my_call()`, that\n> ");
self::function();
function();
//我们还可以使用`self`访问`my`中的另一个模块:
self::cool::function();
super::function();
//这将绑定到*crate*作用域中的`cool::function`。
//在这种情况下,crate范围是最外层的范围。
{
use crate::cool::function as root_function;
root_function();
}
}
}
fn main() {
my::my_call();
}当我们使用self关键字时,它指的是当前模块范围,因此,调用self::function()和function().
当我们在调用函数之前附加super关键字时,我们试图引用父作用域(或另一个模块)。
输出结果
called `my::my_call()`, that > called `my::function()` called `my::function()` called `my::cool::function()` called `function()` called `cool::function()`