【问题标题】:What traits should simple enums in Rust derive?Rust 中的简单枚举应该派生哪些特征?
【发布时间】:2019-09-21 21:06:38
【问题描述】:

我有很多这样的枚举,它们只有标签——没有任何构造函数参数:

pub enum VarRec {
    Variant,
    Record,
}

我目前正在用这些特征派生它们:

#[derive(Debug, PartialEq, Eq, Copy, Clone, Ord, PartialOrd, Hash)]

我希望他们能够实现最大数量的特征,因为枚举非常简单,我不希望他们因为错过特征实现而失去任何权力。还有什么要添加到派生列表中的吗?

【问题讨论】:

  • 我不认为这是可以回答的。没有“所有”类型都应该实现的特征集;这取决于类型。例如,EqOrd 可能不适用于带有 Unknown 变体的枚举。派生太多有害的,因为添加特征实现是一种向后兼容的更改,但删除一个则不是。我的建议是在每个外部可见的类型上使用#[derive(Debug)],并根据具体情况决定其余的。编程是一种思考的练习,而不仅仅是打字;这是你需要思考的事情。
  • 您需要OrdPartialOrd 做什么?订购变体是否有意义?

标签: enums rust traits


【解决方案1】:

可以在Rust API Guidelines 找到一个很好的总结。您已经获得了他们推荐的大部分常见特征,但您可能还想添加 Display 和可能的 Default,如果您认为有一个变体更基本。 derive_more crate 可以帮助顺利实现Display 的过程。

那里有更多建议,因此您应该查看一下,看看是否有适用于您的具体情况的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多