随着模块系统为2018版进行的更新,use
关键字的功能已更改。在use
关键字之后可以使用哪些有效路径?
答案 0 :(得分:4)
use
语句中的路径只能以以下方式启动:
crate
:指的是您自己的板条箱(顶层)self
:引用当前模块super
:引用父模块一个示例,演示了各种use
-路径(Playground):
pub const NAME: &str = "peter";
pub const WEIGHT: f32 = 3.1;
mod inner {
mod child {
pub const HEIGHT: f32 = 0.3;
pub const AGE: u32 = 3;
}
// Different kinds of uses
use base64::encode; // Extern crate `base64`
use crate::NAME; // Own crate (top level module)
use self::child::AGE; // Current module
use super::WEIGHT; // Parent module (in this case, this is the same
// as `crate`)
use child::HEIGHT; // If the first name is not `crate`, `self` or
// `super` and it's not the name of an extern
// crate, it is a path relative to the current
// module (as if it started with `self`)
}
此use
语句行为随Rust 2018(在Rust≥1.31中可用)更改。阅读this guide,了解有关使用声明及其在Rust 2018中的更改的更多信息。
答案 1 :(得分:2)
您的道路可以以两种不同的方式开始:绝对或相对:
您的路径可以以板条箱名称开头,也可以使用crate
关键字来命名当前板条箱:
struct Foo;
mod module {
use crate::Foo; // Use `Foo` from the current crate.
use serde::Serialize; // Use `Serialize` from the serde crate.
}
fn main() {}
否则,根隐式地为self
,这意味着您的路径将相对于当前模块:
mod module {
pub struct Foo;
pub struct Bar;
}
use module::Foo; // By default, you are in the `self` (current) module.
use self::module::Bar; // Explicit `self`.
在这种情况下,您可以使用super
来访问外部模块:
struct Foo;
mod module {
use super::Foo; // Access `Foo` from the outer module.
}