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