【问题标题】:Should I prefer sealed class or Enumeration in Scala?我应该更喜欢 Scala 中的密封类还是枚举?
【发布时间】:2010-11-21 03:18:38
【问题描述】:

我正在尝试为 Scala 实施 Plurk API 竞标,但我需要做出设计选择。

例如,Plurk 用户的性别属性可以是“男性”、“女性”、“其他”之一。

sealed trait Gender
object Male extends Gender
object Female extends Gender
object Others extends Gender

问题是我应该更喜欢上面代码示例中的密封类/对象,而不是 Enumeration 来表示枚举类型吗?

因为我发现在使用其他 Scala 库时很少遇到枚举,并且很多 Actor 的教程使用密封的类/对象来表示 Actor 的消息。

这是否意味着在 Scala 中,密封类是比枚举更好/更传统的选择?

【问题讨论】:

标签: scala enums


【解决方案1】:

如果您不需要遍历 Gender 对象或需要 nextprevious 等方法,则类和对象是正确的解决方案。

如果您需要“类和对象”和“scala.Enumeration”的功能thisthis,您可能会感兴趣。

【讨论】:

  • 如果您需要对密封特征进行迭代,您也可以使用this 基于宏的解决方案
【解决方案2】:

使用Enumeration 在类数方面也便宜不少。在Gender 示例中,这无关紧要,但如果您想通过包含 100 多个元素的枚举来对处理器指令建模,这可能会变得很重要。

【讨论】:

  • Enumeration 如果编译器警告像密封特征这样的丢失案例,那会更好。
猜你喜欢
  • 2013-12-13
  • 2021-06-29
  • 2015-06-13
  • 1970-01-01
  • 2012-09-04
  • 2020-12-16
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多