属性

欢马劈雪     最近更新时间:2020-08-04 05:37:59

226

在 Rust 语言中,声明可以用 ‘attributes’ 来注释。它们看起来像下面这样:

#[test]

或者是像这样:

#![test]

两者的区别是!,!改变了属性所能够适用的事物:

#[foo]
struct Foo;

mod bar {
#![bar]
}

#(foo) 属性应用到下一个项目,而这个项目就是结构体声明。 #![bar] 属性适用于包含它的项目,这种属性是一个 mod 声明。否则,它们是相同的。这样都在某种程度上改变项了目的意义。

例如,考虑这样一个函数:

#[test]
fn check() {
assert_eq!(2, 1 + 1);
}

这是用 #[test] 来标志的。这意味着它是特殊的:当您运行测试时,该函数将执行。当你和往常一样编译时, #[test] 甚至不会被包括在编译的范围之内。这个函数是现在一个测试函数。

属性也可能含有额外的数据:

#[inline(always)]
fn super_fast_fn() {
或者甚至是关键字和值:
#[cfg(target_os = "macos")]
mod macos_only {

Rust 属性被用于许多不同的事情。这有一个属性的完整引用列表。目前,不允许用户创建自己的属性,只能由 Rust 编译器来定义它们。