Rust教學
Rust下載和安裝
Rust簡介
Rust Hello World
Rust的特點
Rust註釋
Rust開發環境安裝
Rust文檔
Rust第一個程序
Rust格式化打印
Rust調試
Rust顯示
測試用例:列表
Rust格式化
Rust原語
Rust常量和運算符
Rust元組
Rust數組和切片
Rust自定義類型
Rust結構
Rust可視性
Rust枚舉
Rust常量
Rust變量綁定
Rust變量綁定-可變性
Rust變量綁定-範圍和陰影
Rust變量綁定-聲明
Rust類型轉換
Rust類型轉換 - 字面量
Rust類型轉換-推導
Rust類型轉換 - 別名
Rust表達式
Rust if/else語句
Rust循環
Rust嵌套和標籤
Rust while循環
Rust for和範圍
Rust匹配/match
Rust匹配析構元組
Rust解構枚舉
Rust指針和引用
Rust解構結構
Rust Guards
Rust綁定
Rust if let
Rust while let
Rust函數
Rust方法
Rust閉包
Rust捕捉
Rust作爲輸入參數
Rust匿名類型
Rust輸入函數
Rust作爲輸出參數
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
的私有函數。