Могу ли я использовать коммутационный футляр для сопоставления рисунков на перечислениях?Могу ли я использовать @switch и Enumerations?
Я попытался
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
}
}
но получить следующее предупреждение (Scala 2.11.4):
warning: could not emit switch for @switch annotated match
def foo(x: Foo.Value) = (x: @switch) match {
Затем я попытался определения перечисления в Java вместо этого, так как Java в enum
с различны чем в Scala Enumeration
. Еще не повезло.
Это @switch
соответствие шаблону доступно только для примитивных типов?
Хотя Java-коммутатор на enum приводит к 'tableswitch' /' lookupswitch'. Но да, кажется, мои варианты: (1) написать Java, или (2), как вы сказали, использовать примитивный тип. –
Важным отличием здесь является то, что перечисления Java имеют встроенную поддержку языка, а перечисление Scala чисто определено в стандартной библиотеке –