syntax scala tuples

syntax - Tuple declaración de parámetro y asignación de rareza



scala tuples (1)

Puedo asignar una tupla de la siguiente manera:

var (min, max) = (1, 2)

Pero no puedo reasignarlos de la siguiente manera

(min, max) = (1, 3) //compiler error: '';'' expected but ''='' found

En cambio, parece que tengo que hacer:

min = 1 max = 3

¿Por qué funciona este último mientras que el primero no?


Bueno, porque estaba especificado de esa manera, supongo.

Esta, la asignación de tupla, es un ejemplo de coincidencia de patrones. La coincidencia de patrones ocurre en tres lugares que recuerdo:

var PATTERN = ... // or val for (PATTERN <- ...) ... case PATTERN => ...

Entonces todos estos casos funcionan:

val l = List((1,''a''), (2,''b''), (3,''c'')) var (n, c) = l(0) for ((n, c) <- l) println(n+": "+c) l(1) match { case (n, c) => println(n+": "+c) }

Ahora, tome el último ejemplo, el que usa el case . Tenga en cuenta que n c en ese ejemplo no son los mismos n y c definidos un poco antes. La coincidencia de patrón asignará valores a los nuevos identificadores n y c , que sombrearán la definición previa para el escope de la declaración de case . Lo mismo sucedió en el ejemplo, que no cambió c previamente definidos.

Ahora, lo que desea es sobrescribir el valor anterior, en lugar de asignar nuevos valores a los nuevos identificadores. No es así como funciona la coincidencia de patrones, lo que significa que hacerlo implicaría una regla completamente nueva. Como Scala empuja suavemente a las personas hacia la inmutabilidad, supongo que no es irracional que no hayan creado una nueva regla solo para manejar esto.