Scala-Verschlüsse im Vergleich zu Java-Innerclasses -> final VS var

Ich habe zuerst diese Frage über die Verwendung von gestelltfinal mit anonymen inneren Klassen in Java:Warum verwenden wir final keyword bei anonymen inneren Klassen?

Ich lese gerade das Scala-Buch von Martin Odersky. Es scheint, dass Scala eine Menge Java-Code vereinfacht, aber bei Scala-Schließungen konnte ich einen signifikanten Unterschied feststellen.

Während wir in Java Closures mit einer anonymen inneren Klasse "simulieren", indem wir eine endgültige Variable erfassen (die kopiert wird, um auf dem Heap zu leben, anstatt auf dem Stack), scheint es, dass wir in Scala einen Closure erstellen können, der einen Wert erfasst, aber auch ein var, und damit updaten im schließungsaufruf!

Es ist also so, als könnten wir eine anonyme Java-Innerclass ohne die verwendenfinal Stichwort! Ich habe das Buch noch nicht vollständig gelesen, aber im Moment habe ich nicht genügend Informationen zu dieser Wahl des Sprachdesigns gefunden.

Kann mir jemand sagen, warum Martin Odersky, der sich wirklich um die Nebenwirkungen der Funktion zu kümmern scheint, Verschlüsse auswählt, um beide erfassen zu könnenval undvarstatt nurval?

Was sind die Vor- und Nachteile von Java- und Scala-Implementierungen?

Vielen Dank

Verwandte Frage:Wann beginnen erfasste Variablen mit Scala-Schließungen auf dem JVM-Heap zu leben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage