什么是 crate 属性,在哪里添加它?

为了了解 Rust 是如何工作的,我决定查看一个名为 很多的基于终端的小型文本编辑器。我克隆了存储库并运行了 cargo build,结果被告知:

error: *if let* syntax is experimental


help: add #![feature(if_let)] to the crate attributes to enable

我应该在哪里添加 #![feature(if_let)]的板条箱属性?

37186 次浏览

A crate attribute is an attribute (#[...]) that applies to the enclosing context (#![...]). This attribute must be added to the top of your crate root, thus the context is the crate itself:

#![attribute_name]
#![attribute_name(arg1, ...)]

If you are creating

  • a library — the crate root will be a file called lib.rs
  • an application — the crate root would be the primary .rs file you build. In many cases, this will be called main.rs
  • an integration test - the crate root is each file in tests/
  • an example - the crate root is each file in examples/

The Rust Programming Language and the Rust Reference talk a bit about attributes in general. The Unstable Book contains a list of feature flags and brief documentation on what they do.

There are many different crate attributes, but the feature crate attribute (#![feature(feature1, feature2)]) may only be used in a nightly version of the compiler. Unstable features are not allowed to be used in stable Rust versions.