与稳定标识符匹配的模式

在标准模式匹配中,使用的标识符将隐藏封闭范围中的任何标识符。有时需要匹配封闭范围的变量。

以下示例函数接受一个字符和一个元组列表,并返回一个新的元组列表。如果角色作为其中一个元组中的第一个元素存在,则第二个元素会递增。如果列表中尚不存在,则会创建一个新元组。

def tabulate(char: Char, tab: List[(Char, Int)]): List[(Char, Int)] = tab match {
  case Nil => List((char, 1))
  case (`char`, count) :: tail => (char, count + 1) :: tail
  case head::tail => head::tabulate(char, tail)
}

上面演示了模式匹配,其中方法的输入 char 在模式匹配中保持稳定:也就是说,如果调用 tabulate('x', ...),则第一个 case 语句将被解释为:

case('x', count) => ...

Scala 会将用刻度线划分的任何变量解释为稳定的标识符:它还将以相同的方式解释以大写字母开头的任何变量。