在Rust中声明可以用“属性”标注,它们看起来像:
#[test] # fn foo() {}
或像这样:
# mod foo { #![test] # }
这两者的区别是!,它改变了属性作用的对象:
!
#[foo] struct Foo; mod bar { #![bar] }
#[foo]作用于下一个项,在这就是struct声明。#![bar]作用于包含它的项,在这是mod声明。否则,它们是一样的。它们都以某种方式改变它们附加到的项的意义。
#[foo]
struct
#![bar]
mod
例如,考虑一个像这样的函数:
#[test] fn check() { assert_eq!(2, 1 + 1); }
它被标记为#[test]。这意味着它是特殊的:当你运行[测试](Testing 测试.md),这个函数将会执行。当你正常编译时,它甚至不会被包含进来。这个函数现在是一个测试函数。
#[test]
属性也可以有附加数据:
#[inline(always)] fn super_fast_fn() { # }
或者甚至是键值:
#[cfg(target_os = "macos")] mod macos_only { # }
Rust属性被用在一系列不同的地方。在参考手册中有一个属性的全表。目前,你不能创建你自己的属性,Rust编译器定义了它们。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8