属性(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 | 序列化时的字段命名 |