属性
属性是应用于模块、crate 或项的元数据。此元数据可用于:
- 代码的条件编译
- 设置 crate 的名称、版本和类型(二进制或库)
- 禁用 lints(警告)
- 启用编译器特性(宏、glob 导入等)
- 链接到外部库
- 标记函数为单元测试
- 标记将成为基准测试一部分的函数
- 属性样式的宏
属性看起来像 #[outer_attribute] 或 #![inner_attribute],它们之间的区别在于应用的范围。
-
#[outer_attribute]应用于其紧随其后的 项。一些项的例子包括:函数、模块声明、常量、结构体、枚举。这里有一个例子,属性#[derive(Debug)]应用于结构体Rectangle#![allow(unused)] fn main() { #[derive(Debug)] struct Rectangle { width: u32, height: u32, } } -
#![inner_attribute]应用于其所在的 项(通常是模块或 crate)。换句话说,此属性被解释为应用于其所在的整个作用域。这里有一个例子,#![allow(unused_variables)]应用于整个 crate(如果放在main.rs中)#![allow(unused_variables)] fn main() { let x = 3; // This would normally warn about an unused variable. }
属性可以采用不同的语法形式的参数
#[attribute = "value"]#[attribute(key = "value")]#[attribute(value)]
属性可以有多个值,也可以跨多行分隔
#[attribute(value, value2)]
#[attribute(value, value2, value3,
value4, value5)]