use、super、self

模組可以使用 use 將其他模組的符號帶進範圍內。您通常會在每個模組的頂端看到類似下方的內容:

use std::collections::HashSet;
use std::process::abort;

路徑

路徑的解析方式包括:

  1. 做為相對路徑:

    • fooself::foo 是指目前模組中的 foo
    • super::foo 是指父項模組中的 foo
  2. 做為絕對路徑:

    • crate::foo 是指目前 Crate 根目錄中的 foo
    • bar::foo 是指 bar Crate 中的 foo
This slide should take about 8 minutes.
  • 常見的方式是在較短的路徑上「重新導出」符號。舉例來說,Crate 中的頂層 lib.rs 可能有

    mod storage;
    
    pub use storage::disk::DiskStorage;
    pub use storage::network::NetworkStorage;

    透過便捷的短路徑,向其他 Crate 提供 DiskStorageNetworkStorage

  • 在大部分情況下,只有顯示在模組中的項目需要 use。但是,如要呼叫特徵的任何方法,該特徵必須處於範圍之內,即使實作該特徵的型別已在範圍內也一樣。舉例來說,如要在實作 Read 特徵的型別上使用 read_to_string 方法,您需要 use std::io::Read

  • use 陳述式可能包含萬用字元,例如 use std::io::*。不過,這不是建議的做法,因為我們無法確定匯入了哪些項目,而且這些項目可能隨著時間改變。