你如何进行特征门特质的推导?

RBF*_*F06 3 traits rust

假设你有一个这样的枚举:

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum MyEnum {
    One,
    Two,
    Three,
    Four,
}
Run Code Online (Sandbox Code Playgroud)

但是您只想导出,比如说,如果启用了PartialEq某个功能(我们称之为)。myenum-partialeq

在 Rust 中这是如何惯用地完成的?

Cha*_*man 6

使用#[cfg_attr()]

#[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()每个字段执行完整的复制,这需要时间,甚至可能无法优化。