Bueno, porque estaba especificado de esa manera, supongo.
Esto, la asignación de tupla, es un ejemplo de coincidencia de patrones. la coincidencia de patrones que ocurre en tres lugares que recuerdo de:
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
Así que todos estos casos de trabajo:
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, toma el último ejemplo, el uso de case
. Tenga en cuenta que n
y c
en ese ejemplo son no los mismos n
y c
definidos un poco antes. La coincidencia de patrón asignará valores a nuevos identificadoresn
y c
, que sombrearán la definición anterior para el escope de la declaración case
. Lo mismo sucedió en el ejemplo for
, que no cambió n
y 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.
ticket es https://issues.scala-lang.org/browse/SI-1324 ("necesitará un SIP") –