在Scala枚举中,如何解释' val RED,GREEN,BLUE = Value'?

时间:2017-04-01 05:28:27

标签: scala enumeration

描述枚举的定义方式如下:

object Color extends Enumeration{
  type Color = Value
  val RED, GREEN, BLUE = Value
}

我不明白的是最后一行的结构。它似乎创建了一堆值并为它们分配了所有相同的值?但是Value是一种类型,所以它是如何工作的。

1 个答案:

答案 0 :(得分:2)

是的,那很不幸。如果您咨询source code,您会看到Value既是类型(第184行为abstract class),也是重载方法(第128 - 154行)。

在没有参数的情况下调用Value方法实际上变成了对new Val(i, name)的调用,因此为每个颜色分配了一个“新的”,即不同的值。

Scala枚举已经历了一些major rethinking,并且在即将发布的版本中可能会发生变化。