代码中的名称与正在使用的名称
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;