Skip to content

属性(Attributes) ​

属性是贴在语句、函数、结构体等项前面的编译器指令,形如 #[名称(参数)],作用于紧随其后的那一项。

rust
#[allow(unused_mut)]
let mut count = 0;

两种形态:

  • #[...](外部属性):作用于紧跟的一个项
  • #![...](内部属性):作用于所在的整个文件或 crate

与关键字不同,属性名是开放集合:编译器内置一部分,第三方库也可定义自己的属性(如 serde 的 #[serde(rename = "...")])。

条件编译 ​

属性作用
#[cfg(test)]仅在 cargo test 时编译该模块
#[cfg(target_os = "macos")]仅在指定平台编译

测试 ​

属性作用
#[test]把函数标记为测试,cargo test 收集执行
#[ignore = "原因"]默认跳过该测试;cargo test -- --ignored 时运行
#[should_panic]断言该测试应当 panic(未 panic 则失败)

开发检查豁免 ​

属性作用
#[allow(...)]豁免某个检查项,如 #[allow(unused_mut)]
#[warn(...)]恢复为警告(默认级别)
#[deny(...)]升级为错误

常见检查项:unused_mut(多余的 mut)、unused_variables(未使用变量)、dead_code(死代码)。

自动派生 ​

属性作用
#[derive(Debug, Clone, ...)]为类型自动生成标准 trait 的实现

第三方库属性 ​

属性处理者作用
#[serde(rename = "...")]serde序列化时的字段命名

参考 ​