模式匹配編譯為 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 規範: