随着 2018 年版模块系统的改进,use
关键字的功能发生了变化。可以在use
关键字之后使用的有效路径是什么?
问问题
1285 次
2 回答
4
语句中的路径use
只能以以下方式开始:
- extern crate 的名称:那么它指的是那个 extern crate
crate
: 指的是(你的顶层)自己的 crateself
: 指当前模块super
: 指父模块- 其他名称:在这种情况下,它会查找相对于当前模块的名称
演示各种use
-paths ( 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 中可用))。阅读本指南,了解有关 use 语句以及它们在 Rust 2018 中的变化的更多信息。
于 2019-02-07T16:28:43.070 回答
2
您的路径可以以两种不同的方式开始:绝对或相对:
crate
您的路径可以以 crate 名称或命名当前 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() {}
否则,根是implicitely
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. }
于 2019-01-21T11:31:32.583 回答