Scala中的枚举概念 - 选择哪个选项?

M.K*_*.K. 18 scala

Scala程序员在定义枚举时有几个选项:

  1. 使用Scala枚举
  2. 使用Scala密封案例对象模仿枚举.
  3. 使用Scalaz Enum
  4. 使用Java枚举

当研究围绕枚举的最佳实践Scala中,我偶然发现了谷歌后题为枚举必须死,也博客其中突出使用Scala的一个潜在的问题Enumeration类.这两个引用都对Scala Enumeration类产生了负面影响.

选项2似乎很多工作,关于选项3,我还没有使用Scalaz库,所以我很想知道其他人使用过的经验Scalaz Enum.最后的选择是与Java交互,我试图避免,因为我喜欢在我的Scala编程中采用纯粹的方法.

这篇文章的重点是利用社区经验,以便详细说明当一个选项优先于另一个选项时的上下文,以及使用特定选项的错误或可能导致严重问题的上下文中,这样就可以在选择一种选择而不是另一种选择时做出明智的决定.当一个选项优于其他选项时,我不是在寻找意见,而是具体使用上下文; 意见可能会使这个帖子关闭,所以请避免这样做.

Wad*_*ade 4

我过去根据情况使用过前两个选项。我不能谈论其他选项,但我不愿意使用 Java 枚举。一般来说,如果有可用的 Java 解决方案,我总是更喜欢 Scala 解决方案。我也不愿意引入一个仅用于枚举的库。引入一个大型库来完成如此小的任务似乎有点繁重,特别是当有内置方法来完成该任务时。但如果该库提供了我想要的其他未内置的功能,情况可能会有所不同。

部分取决于您需要枚举来完成什么任务。如果您只是需要它来创建一组离散值,那么我会倾向于选项 2。这实际上根本不需要做太多工作。如果您的需要需要,您可以使其变得更复杂,但最基本的场景是:

trait MyEnum
case object MyValue1 extends MyEnum
case object MyValue2 extends MyEnum
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您需要的东西实际上为您提供了一组“有序”的离散值,您可以对其进行迭代、获取数值等,那么我可能更倾向于 Scala 枚举。