Avatar ·

如何在 Rust 中条件性地包含 `#[derive]` 等属性?

大家好!我正在学习 Rust,遇到了一个情况:我希望结构体仅在调试模式下自动实现 `Debug` trait,而在发布版本中则不实现。我知道 `#[cfg(debug_assertions)]` 可以条件编译代码块,但如何将其应用于属性,特别是 `#[derive]` 呢? 以下是一个不起作用的示例: ```rust #[cfg(debug_assertions)] #[derive(Debug)] struct MyStruct { value: i32, } ``` 编译器报错说 `derive` 属性不能是条件性的。我尝试了不同方法:将 `cfg` 放在 `derive` 之后、使用嵌套属性——都不起作用。 我在英文论坛上找到了类似讨论,但它们都很旧(2016–2018 年)。也许从那以后情况有所改变?或者有变通方法?具体需求是:在调试模式下我想用 `{:?}` 查看结构体,而在发布版本中我不想为多余代码付出代价。请告诉我如何在现代 Rust(edition 2021)中正确实现这一点。 提前感谢!