Каковы действительные корни пути в ключевом слове использования?
С модернизацией модульной системы для издания 2018 года, функционирование use
Ключевое слово изменилось. Каковы действительные пути, которые могут идти после use
ключевое слово?
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. }
Пути в use
Заявления могут начинаться только следующими способами:
- имя внешнего ящика: тогда оно относится к этому внешнему ящику
crate
: относится к (верхнему уровню вашего) собственного ящикаself
: относится к текущему модулюsuper
: относится к родительскому модулю- другое имя: в этом случае оно ищет это имя относительно текущего модуля
Пример, демонстрирующий все виды use
дорожки ( детская площадка):
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)). Прочтите это руководство для получения дополнительной информации об использовании операторов и как они изменились в Rust 2018.