我可以在枚舉上使用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枚舉純粹是在標準庫中定義的 –