从scala枚举中获取值

时间:2016-06-18 21:52:05

标签: scala enumeration

说我有这样的枚举

<%= @items.inspect %>

我也想要扩展订购的课程[SimpleEnum]

object SimpleEnum extends Enumeration{
 val ONE = Value(1)
 val TWO = Value(2)
 val THREE = Value(3)
 etc...
}

所以在SimpleClass中我只需要将Value附加到相应的SimpleEnum val。

enter image description here

在java中,我能够在枚举上声明一个变量并通过此var访问与其对应的实际值,在scala中我正在寻找一种方法来获取枚举的实例并触及它的价值。

2 个答案:

答案 0 :(得分:3)

可以使用id方法。

scala> object E extends Enumeration { 
  val A = Value(1)
  val B = Value(7)
  val C = Value(2)
}
defined object E

scala> E.A.id
res7: Int = 1

scala> E.B.id
res8: Int = 7

scala> E.C.id
res9: Int = 2

Enumeration值也可以轻松比较

scala> E.A < E.B
res10: Boolean = true

scala> E.C < E.B
res11: Boolean = true

scala> E.B < E.A
res12: Boolean = false

有关更多信息,请参阅documentation

修改

图片中的代码错误。首先,与原始代码(图片中没有)一样,SimpleEnum应该是object,而不是class。一旦你进行了改变,你的代码将无法编译,而且应该响铃。

您希望SimpleClass能够包装您的枚举值。这些值的类型(即ONETWOTHREE)不是SimpleEnum,而是SimpleEnum.Value。此类对象具有id方法。

class SimpleClass(se: SimpleEnum.Value) extends Ordered[SimpleEnum.Value] {
  override def compare(that: SimpleEnum.Value): Int = se.id
}

常见的做法是声明Value的类型别名,其名称与枚举对象完全相同。然后你可以导入这个类型并使用它

object SimpleEnum extends Enumeration {
  type SimpleEnum = Value

  val ONE = Value(1)
  val TWO = Value(2)
  val THREE = Value(3)
}

import SimpleEnum.SimpleEnum

class SimpleClass(se: SimpleEnum) extends Ordered[SimpleEnum] {
  override def compare(that: SimpleEnum): Int = se.id
}

请注意,Enumeration#Value已实施Ordered[Value]。您可以在我之前链接的文档中对其进行验证。

scala中没有经典的java enum,但由于语言非常酷,因此可以创建一个名为Enumeration的常规类,其中有一些技巧允许类似的行为。

答案 1 :(得分:-1)

问题已经回答,但我的方法如下:

object SimpleEnum extends Enumeration{
 type SimpleEnum = Value
    val ONE = Value(1)
    val TWO = Value(2)
    val THREE = Value(3)
    etc...
}

class SimpleClass(val i : Int){
    def getNumber() {
        import SimpleEnum._
        SimpleEnum(i)
    }
}