Scala Language Coincidencia de patrones con identificador estable


Ejemplo

En la coincidencia de patrón estándar, el identificador utilizado sombreará cualquier identificador en el ámbito de envolvente. A veces es necesario hacer coincidir en la variable del ámbito de cierre.

La siguiente función de ejemplo toma un carácter y una lista de tuplas y devuelve una nueva lista de tuplas. Si el carácter existía como el primer elemento en una de las tuplas, el segundo elemento se incrementa. Si aún no existe en la lista, se crea una nueva 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)
}

Lo anterior demuestra la coincidencia de patrones donde la entrada del método, char , se mantiene 'estable' en la coincidencia de patrones: es decir, si llama a tabulate('x', ...) , la primera declaración de caso se interpretaría como:

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

Scala interpretará cualquier variable demarcada con una marca de verificación como un identificador estable: también interpretará cualquier variable que comience con una letra mayúscula de la misma manera.