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()`