5

mam ten pattern match pasujący tylko o wartości bajtów, ale kiedy dodać @switch mówi:Dlaczego Scala nie może zoptymalizować tego dopasowania do przełącznika?

nie mógł emitować przełącznik @switch Opatrzone komentarzem Dopasuj

Co ja tu brakuje?

Wystarczy FYI, co Próbowałem już i nie działa:

  • Moving to stałe do interfejsu Java i przy użyciu public static final byte pola (Próbowałem również czyni je int zamiast byte)
  • Znakowanie pola jak final val w Scala Message towarzysza sprzeciw
  • Oznakowanie pola jak @inline na obiekt towarzysz

Zdecydowanie jestem tutaj zagubiony.

+0

To jest [niemożliwe] (http://www.scala-lang.org/api/current/index.html#scala.annotation.switch): "niedosłowne może uniemożliwić generowanie przełączników: to by się nie skompilowało" . – senia

+0

Ten wpis zawiera martwy link, który sprawia, że ​​pytanie jest niekompletne, jeśli oryginalny plakat jest nadal w pobliżu, czy można go naprawić, – lijat

+0

, teraz zawiera odpowiedni link. –

Odpowiedz

2

Odpowiedź przewidziane na forum scala-user robił vals ostateczna i usuwania Byte adnotacji:

object Message { 
    final val Authentication = 'R' 
    final val BackendKeyData = 'K' 
    final val Bind = 'B' 
    final val BindComplete = '2' 
} 

Teraz @switch poprawnie wytwarzaną przez lookupswitch (nie generują tableswitch ale jest wystarczająco dobry) .