Rust use關鍵字引用模組

當調用模組的函數時,需要指定完整的路徑。

通過下麵一個例子來理解這個概念:

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

在上面的例子中,通過指定完整路徑來調用nested_modules()函數,即,a::b::c::nested_modules()

use關鍵字

在上面的場景中,看到函數調用非常冗長。 Rust中的use關鍵字縮短了調用函數的長度,使函數的模組在範圍內。 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 關鍵字

super關鍵字用於從當前模組訪問父模組,它使能夠訪問父模組的私有功能。

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

    pub mod example {
        use super::x;

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

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

輸出結果如下 -

2

在上面的示例中,模組示例使用了引用其父模組的super。 由於這個原因,模組示例的foo()函數可以訪問模組a的私有函數。


上一篇: Rust公開函數 下一篇: Rust向量