程式碼中的名稱與正在使用的名稱
use
語句中名稱的雙冒號語法類似於程式碼中其他位置使用的名稱,但這些路徑的含義不同。
預設情況下,use
語句中的名稱被解釋為絕對名稱,從 crate root 開始。程式碼中其他位置的名稱與當前模組有關。
該宣告:
use std::fs::File;
在包的主檔案和模組中具有相同的含義。另一方面,諸如 std::fs::File::open()
之類的函式名稱僅在包的主檔案中引用 Rust 的標準庫,因為程式碼中的名稱是相對於當前模組的。
fn main() {
std::fs::File::open("example"); // OK
}
mod my_module {
fn my_fn() {
// Error! It means my_module::std::fs::File::open()
std::fs::File::open("example");
// OK. `::` prefix makes it absolute
::std::fs::File::open("example");
// OK. `super::` reaches out to the parent module, where `std` is present
super::std::fs::File::open("example");
}
}
要使 std::…
名稱的行為與你可以新增的 crate 根目錄相同:
use std;
相反,你可以通過在 self
或 super
關鍵字前加上 use
路徑:
use self::my_module::my_fn;