【发布时间】:2019-09-21 21:06:38
【问题描述】:
我有很多这样的枚举,它们只有标签——没有任何构造函数参数:
pub enum VarRec {
Variant,
Record,
}
我目前正在用这些特征派生它们:
#[derive(Debug, PartialEq, Eq, Copy, Clone, Ord, PartialOrd, Hash)]
我希望他们能够实现最大数量的特征,因为枚举非常简单,我不希望他们因为错过特征实现而失去任何权力。还有什么要添加到派生列表中的吗?
【问题讨论】:
-
我不认为这是可以回答的。没有“所有”类型都应该实现的特征集;这取决于类型。例如,
Eq和Ord可能不适用于带有Unknown变体的枚举。派生太多是有害的,因为添加特征实现是一种向后兼容的更改,但删除一个则不是。我的建议是在每个外部可见的类型上使用#[derive(Debug)],并根据具体情况决定其余的。编程是一种思考的练习,而不仅仅是打字;这是你需要思考的事情。 -
您需要
Ord和PartialOrd做什么?订购变体是否有意义?