Scala Language Pattern Matching With Stable Identifier


Esempio

Nella corrispondenza del modello standard, l'identificatore utilizzato ombreggia qualsiasi identificatore nell'ambito di inclusione. A volte è necessario abbinare la variabile dello scope che racchiude.

La seguente funzione di esempio prende un carattere e un elenco di tuple e restituisce un nuovo elenco di tuple. Se il carattere esiste come primo elemento in una delle tuple, il secondo elemento viene incrementato. Se non esiste ancora nella lista, viene creata una nuova tupla.

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)
}

Quanto sopra dimostra la corrispondenza del modello in cui l'input del metodo, char , viene mantenuto "stabile" nella corrispondenza del modello: ovvero, se si chiama tabulate('x', ...) , la prima dichiarazione case verrà interpretata come:

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

Scala interpreterà qualsiasi variabile demarcata con un segno di spunta come identificatore stabile: interpreterà anche qualsiasi variabile che inizia con una lettera maiuscola nello stesso modo.