2016-04-03 74 views
15

在谈到进口时,生锈的人经常使用前奏什么是前奏?

这是什么前奏他们在谈论什么?

它如何影响我的Rust程序?

回答

13

生锈,为了使用一个符号,你必须:

  • 已在当前范围内定义的符号
  • 已经通过use指令进口在当前范围内的符号:use std::mem;
  • std::mem::replace

不过,有些极少数符号可没有这样的动作来使用:

  • 使用其绝对路径指符号:例如OptionCopy

    这是由于Rust prelude

    许多特征,类型和功能被认为是如此频繁地使用,因此它不需要它们的使用需要明确地每次输入必要的符号。这得以实现归功于由编译器拍摄的两个隐式操作:

    • 在每个板条箱的根,编译器喷射的每个模块中的隐式extern crate std;
    • ,编译器喷射的隐式use std::prelude::v1::*;(现在)

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


    其他一些库或标准库的连子组件还定义了prelude模块,你可以用相同的水珠导入语法导入:use xxx::prelude::*;。与std::prelude不同,但是这些并不是编译器特有的,因此需要显式导入。


    编译器是不可知的前奏的确切内容,因此,如果一个是用自己更换std箱(例如,在嵌入式开发),一会又决定什么进入他们的std::prelude::v1模块。

  • +0

    @LukasKalbertodt:好的,我已经开始用'vec!','panic!'......来写答案了,但是找不到它们来自哪里。我会删除它。 –

    +0

    [此RFC](https://github.com/rust-lang/rfcs/pull/890)建议将前奏功能添加到用户箱。它已经关闭了一段时间,但可能会在未来恢复。 –

    +0

    @MatthieuM。感谢您的明确解释。看起来'println!'宏不是来自'std :: prelude'? –