模式匹配编译为 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 规范: