为什么我需要Scala枚举

时间:2018-11-27 22:55:11

标签: scala enums

使用Scala的Enum会比不使用它带来什么确切的好处。

object Colours extends Enumeration {
  val Red, Blue, Green = Value
}

为什么我不能仅将其用作:

 object Colours{
      val Red = "Red"
      val Blue = "Blue" 
      val Green = "Green"
}

我同意它有点冗长,但是我不必在必须使用它时就做一个toString。还有更好的理由使用枚举吗? 我的问题是: 1)是否应该仅因为枚举是一种好习惯而使用Enums? 2)是否有任何性能方面的考虑?

2 个答案:

答案 0 :(得分:3)

  1. 真正的问题是“为什么要这样做?”。使用类型系统时,可以减少错误代码的可能性。您可以防止出现以下错误:

    showColor("green") // wrong casing
    
    color match {
      case "Green" => // 
      case "Pink" => // invalid color
    } // match didn't include all possibilities (exhaustiveness)
    

    当然,您始终可以使用定义的val来代替文字字符串,但是没有类型就没有强制执行的值。

  2. 明智的性能-除非处于紧密的循环中,否则可能不会有太大的差异

答案 1 :(得分:1)

summarize

您将从Enum

获得这些好处
  • 您有索引
  • 您有预定义的名称
  • 您可以迭代
  • 您可以比较订购
  • 您可以迭代成员。

更何况Enum遇到这些问题

  • 擦除后枚举具有相同的类型。
  • 在编译过程中没有详尽的匹配检查。
  • 它们不与Java枚举互操作。