5

Tôi đã pattern match này phù hợp với chỉ trên các giá trị Byte nhưng khi tôi thêm các @switch nó nói:Tại sao Scala không thể tối ưu hóa kết quả phù hợp này với một công tắc?

không thể phát ra chuyển sang @switch trận đấu chú thích

tôi thiếu gì ở đây?

Just FYI, những gì tôi đã cố gắng đã và đã không làm việc:

  • Di chuyển liên tục này cho một giao diện Java và sử dụng public static final byte lĩnh vực (Tôi cũng đã cố gắng làm cho chúng int thay vì byte)
  • Đánh dấu các trường là final val tại đối tượng đồng hành Scala Message
  • Đánh dấu các trường là @inline tại đối tượng đồng hành

Tôi chắc chắn bị lạc ở đây.

+0

Đó là [không thể] (http://www.scala-lang.org/api/current/index.html#scala.annotation.switch): 'không có nghĩa đen có thể ngăn chặn việc tạo chuyển đổi: thao tác này sẽ không biên dịch' . – senia

+0

Bài đăng này chứa liên kết chết khiến câu hỏi không đầy đủ, nếu áp phích gốc vẫn còn xung quanh, bạn có thể cầu xin sửa chữa rằng – lijat

+0

bây giờ nó bao gồm liên kết phù hợp. –

Trả lời

2

Câu trả lời theo quy định tại diễn đàn scala-user đã làm cho Vals thức và loại bỏ các Byte chú thích:

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

Bây giờ @switch một cách chính xác tạo ra một lookupswitch (nó không tạo ra một tableswitch nhưng nó đủ tốt) .