假设你有一个这样的枚举:
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MyEnum {
One,
Two,
Three,
Four,
}
但是如果启用了某个功能(我们称之为
PartialEq
),您只想派生,比如说myenum-partialeq
。
这在 Rust 中是如何按照惯用方式完成的?
#[cfg_attr()]
:
#[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "myenum-partialeq", derive(PartialEq)]
pub enum MyEnum {
One,
Two,
Three,
Four,
}
要记住的一件事是,如果结构不是通用的,则始终将
#[derive(Copy)]
放在同一行或 #[derive(Clone)]
之上。这是因为如果 #[derive(Clone)]
在相同的 #[derive()]
或以下 #[derive(Copy)]
它会扩展为只执行按位复制,而如果它在上面它会为每个字段执行完整的 clone()
,这需要时间甚至可能无法优化。