说我有这样的枚举
<%= @items.inspect %>
我也想要扩展订购的课程[SimpleEnum]
object SimpleEnum extends Enumeration{
val ONE = Value(1)
val TWO = Value(2)
val THREE = Value(3)
etc...
}
所以在SimpleClass中我只需要将Value附加到相应的SimpleEnum val。
在java中,我能够在枚举上声明一个变量并通过此var访问与其对应的实际值,在scala中我正在寻找一种方法来获取枚举的实例并触及它的价值。
答案 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
能够包装您的枚举值。这些值的类型(即ONE
,TWO
,THREE
)不是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)
}
}