與穩定識別符號匹配的模式

在標準模式匹配中,使用的識別符號將隱藏封閉範圍中的任何識別符號。有時需要匹配封閉範圍的變數。

以下示例函式接受一個字元和一個元組列表,並返回一個新的元組列表。如果角色作為其中一個元組中的第一個元素存在,則第二個元素會遞增。如果列表中尚不存在,則會建立一個新元組。

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 會將用刻度線劃分的任何變數解釋為穩定的識別符號:它還將以相同的方式解釋以大寫字母開頭的任何變數。