Cóż, ponieważ to było tak zaprojektowane, jak sądzę.
To przyporządkowanie krotka jest przykładem dopasowania wzorca. pasujące do wzorca dzieje się w trzech miejscach, że przywołanie:
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
Więc wszystkie te przypadki praca:
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)
}
Teraz weź ostatni przykład, jeden przy użyciu case
. Zauważ, że n
i c
w tym przykładzie są nie tym samym n
i zdefiniowane nieco wcześniej. Mecz wzór będzie przypisać wartości do nowych identyfikatorów n
i c
, który cień poprzednią definicję dla escope rachunku case
. To samo stało się w przykładzie for
, który nie zmienił wcześniej zdefiniowanych n
i c
.
Teraz, co chcesz się zdarzyć, aby zastąpić poprzednią wartość, zamiast przypisać nowe wartości do nowych identyfikatorów. Nie chodzi o to, jak działa dopasowanie do wzorca, co oznacza, że jego realizacja wiązałaby się z całkowicie nową regułą. Skoro Scala delikatnie popycha ludzi w kierunku niezmienności, to nie jest to nierozsądne, że nie stworzyli nowej reguły, żeby sobie z tym poradzić.
bilet jest https://issues.scala-lang.org/browse/SI-1324 ("będzie musiała SIP") –