Keyword use

source ·
Expand description

从其他 crates 或模块导入或重命名项。

通常,使用 use 关键字来缩短引用模块项所需的路径。 关键字可能出现在模块,块甚至函数中,通常在顶部。

关键字最基本的用法是 use path::to::item;,尽管支持许多便捷的快捷方式:

  • 使用类似 glob 的大括号语法 use a::b::{c, d, e::f, g::h::i}; 同时绑定具有公共前缀的路径列表

  • 使用 self 关键字 (例如 use a::b::{self, c, d::e};) 同时绑定具有公共前缀的路径列表及其公共父模块

  • 使用语法 use p::q::r as x; 将目标名称重新绑定为新的本地名称。 这也可以与最后两个特性一起使用: use a::b::{self as ab, c as abc}

  • 使用星号通配符语法 use a::b::*; 绑定与给定前缀匹配的所有路径。

  • 多次嵌套之前特性的组,例如 use a::b::{self as ab, c, d::{*, e::f}};

  • 使用可见性修改器 (例如 pub use a::b;) 进行重导出

  • 使用 _ 导入,且仅导入 trait 的方法,而不将其绑定到名称 (例如避免冲突) : use ::std::io::Read as _;

支持使用像 cratesuperself 这样的路径限定符: use crate::a::b;

注意,当在类型上使用通配符 * 时,它不会导入其方法 (尽管对于 enum 而言,它会导入变体,如下例所示)。

enum ExampleEnum {
    VariantA,
    VariantB,
}

impl ExampleEnum {
    fn new() -> Self {
        Self::VariantA
    }
}

use ExampleEnum::*;

// Compiles.
let _ = VariantA;

// 不编译!
let n = new();
Run

有关 use 和常规路径的更多信息,请参见 Reference

也可以在 Reference 中找到有关 2015 年版本和 2018 年版本之间的路径和 use 关键字的差异。