📜  Rust使用关键字

📅  最后修改于: 2021-01-08 13:47:26             🧑  作者: Mango

引用不同模块中的名称

当我们调用模块的函数时,我们需要指定完整路径。

让我们通过一个例子来理解这个概念:

 pub mod a
{
  pub mod b
  {
    pub mod c
    {
      pub fn nested_modules()
      {
        println!("Nested Modules");
      }
    }
  }
 }

fn main()
{
 a::b::c::nested_modules();
}

输出:

Nested Modules

在上面的示例中,通过指定完整路径(即a :: b :: c :: nested_modules() )来调用nested_modules()函数。

使用关键字

在上述情况下,我们看到函数调用相当长。锈“使用关键字”缩短了函数调用带来的函数的模块中的范围的长度。 use关键字仅带来我们在范围中指定的那些模块。让我们通过一个例子来理解这一点:

 pub mod a
{
  pub mod b
  {
    pub mod c
    {
      pub fn nested_modules()
      {
        println!("Nested Modules");
      }
    }
  }
 }

use a::b::c::nested_modules;
fn main()
{
  nested_modules();
}

输出:

Nested Modules

在上面的示例中,use关键字将所有模块都包含在范围内。因此,我们可以直接调用函数,而无需在调用函数包含模块。

枚举也是模块等名称空间的一种形式。因此,我们可以使用use关键字将枚举变量引入范围。在use语句中,我们可以在大括号中列出枚举变量,并在最后一个位置列出逗号。

让我们通过一个例子来理解:

 #[derive(Debug)]
enum Flagcolor
{
 Orange,
 White,
 Green,
}
use Flagcolor::{Orange,White,Green};
fn main()
{
  let _o= Orange;
  let _w= White;
 let _g= Green;
 println!("{:?}",_o);
println!("{:?}",_w);
println!("{:?}",_g);
}

输出:

orange
white
green

在上面的示例中,Flagcolor是其名称在use语句中指定的名称空间。因此,我们可以直接使用枚举变量,而无需使用枚举名称和名称空间说明符。

使用'*'运算符

*运算符用于将所有项目都带入范围,这也称为glob运算符。如果我们使用glob运算符,则不需要单独指定枚举变量。

让我们通过一个例子来理解这一点:

 #[derive(Debug)]
enum Color
{
  Red,
  Yellow,
  Green,
  Orange,
}

use Color::*;
fn main()
{
  let _red=Red;
  let _yellow=Yellow;
  let _green=Green;
  let _orange=Orange;
  println!("{:?}",_red);
  println!("{:?}",_yellow); 
  println!("{:?}",_green);
  println!("{:?}",_orange);
}

输出:

Red
Yellow
Green
Orange

在上面的示例中,'*'运算符已用于包括所有枚举变量,而未在use语句中指定列表。

使用超级关键字

super关键字用于从当前模块访问祖父母模块。它使我们能够访问父模块的私有功能。

 mod a{
fn x() -> u8 {
    5
}

pub mod example {
    use super::x;

    pub fn foo() {
        println!("{}",x());
    }
}}

fn main()
{
  a::example::foo();
}

输出:

5

在上面的示例中,模块示例使用了super,该super引用了其父模块。因此,模块示例的foo()函数可以访问模块a的私有函数。