模式匹配編譯為 tableswitch 或 lookupswitch
@switch
註釋告訴編譯器 match
語句可以在位元組碼級別用單個 tableswitch
指令替換。這是一個次要優化,可以在執行時刪除不必要的比較和變數載入。
@switch
註釋僅適用於與文字常量和 final val
識別符號的匹配。如果模式匹配無法編譯為 tableswitch
/ lookupswitch
,編譯器將發出警告。
import annotation.switch
def suffix(i: Int) = (i: @switch) match {
case 1 => "st"
case 2 => "nd"
case 3 => "rd"
case _ => "th"
}
結果與正常模式匹配相同:
scala> suffix(2)
res1: String = "2nd"
scala> suffix(4)
res2: String = "4th"
來自 Scala 文件 (2.8+) - @switch
:
要應用於匹配表示式的註釋。如果存在,編譯器將驗證匹配是否已編譯為 tableswitch 或 lookupswitch,如果它編譯為一系列條件表示式,則發出錯誤。
從 Java 規範:
- tableswitch :通過索引和跳轉訪問跳轉表
- lookupswitch :通過金鑰匹配和跳轉訪問跳轉表