前奏是什么?

Mat*_* M. 27 rust

在谈论进口时,经常使用锈病来使用" 前奏"这个词.

他们谈论的前奏是什么?

它如何影响我的Rust程序?

Mat*_* M. 20

在Rust中,为了使用符号,您必须:

  • 已定义当前范围内的符号
  • 已通过use指令在当前范围中导入符号:use std::mem;
  • 使用其绝对路径指代符号: std::mem::replace

但是,如果没有这样的动作,可以使用一些非常少的符号:Option或者Copy例如!

这是由于Rust的前奏.

许多特征,类型和功能被认为是如此频繁使用,以至于不要求它们的使用需要每次都明确地输入必要的符号.这是通过编译器采取的两个隐式操作来实现的:

  • 在每个包的根,编译器注入一个隐式 extern crate std;
  • 在每个模块中,编译器都会注入一个隐式的use std::prelude::v1::*;(现在)

std::prelude::v1只是一个常规模块,它使用pub use ...语法重新导出那些常用符号.它的确切内容可以在这里找到.


许多其他库,甚至标准库的子组件也定义了一个prelude模块,您可以使用相同的glob导入语法导入该模块:use xxx::prelude::*;.std::prelude然而,与编译器不同,它们不是特殊的,因此需要显式导入.


编译器对前奏的确切内容是不可知的,因此如果std要用自己的内容替换crate(例如,在嵌入式开发中),则可以决定进入其std::prelude::v1模块的内容.