属性

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

238

attributes.md
commit 024aa9a345e92aa1926517c4d9b16bd83e74c10d

在Rust中声明可以用“属性”标注,它们看起来像:

#[test]
# fn foo() {}

或像这样:

# mod foo {
#![test]
# }

这两者的区别是!,它改变了属性作用的对象:

#[foo]
struct Foo;

mod bar {
    #![bar]
}

#[foo]作用于下一个项,在这就是struct声明。#![bar]作用于包含它的项,在这是mod声明。否则,它们是一样的。它们都以某种方式改变它们附加到的项的意义。

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

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

它被标记为#[test]。这意味着它是特殊的:当你运行[测试](Testing 测试.md),这个函数将会执行。当你正常编译时,它甚至不会被包含进来。这个函数现在是一个测试函数。

属性也可以有附加数据:

#[inline(always)]
fn super_fast_fn() {
# }

或者甚至是键值:

展开阅读全文