我可以在枚举上使用switch-case进行模式匹配吗?我可以使用@switch和枚举吗?
我试图
import scala.annotation.switch
object Foo extends Enumeration {
val First = Value
val Second = Value
val Third = Value
}
object Main {
def foo(x: Foo.Value) = (x: @switch) match {
case Foo.First => 1
case Foo.Second => 2
case Foo.Third => 3
}
}
但得到以下警告(斯卡拉2.11.4):
warning: could not emit switch for @switch annotated match
def foo(x: Foo.Value) = (x: @switch) match {
然后我试图定义Java中的枚举,而不是,因为Java的enum
s为比Scala的不同Enumeration
。仍然没有运气。
它@switch
模式匹配只适用于原始类型?
尽管Java在枚举上的开关情况导致了“tableswitch”/“lookupswitch”。但是,是的,看起来我的选择似乎是(1)编写Java,或者(2)如您所说,使用基本类型。 –
这里的重要区别在于Java枚举具有内置的语言支持,而Scala枚举纯粹是在标准库中定义的 –