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

以上是 Rust 编程中的 Super 和 Self 关键字 的全部内容, 来源链接: utcz.com/z/345817.html

回到顶部