Zamknięcia Scala w porównaniu do klas wewnętrznych Java -> wersja ostateczna VS

Najpierw zadałem to pytanie na temat użyciafinal z anonimowymi klasami wewnętrznymi w Javie:Dlaczego używamy końcowego słowa kluczowego z anonimowymi klasami wewnętrznymi?

Właściwie czytam książkę Scali Martina Odersky'ego. Wygląda na to, że Scala upraszcza dużo kodu Java, ale w przypadku zamknięć Scala zauważyłem znaczącą różnicę.

Podczas gdy w Javie „symulujemy” zamknięcia z anonimową klasą wewnętrzną, przechwytując ostatnią zmienną (która zostanie skopiowana do życia na stercie zamiast stosu), wydaje się, że w Scali możemy utworzyć zamknięcie, które może przechwycić val, ale także var, a więc zaktualizuj go w wywołaniu zamknięcia!

Tak więc możemy użyć anonimowej wewnętrznej klasy Java bezfinal słowo kluczowe! Nie skończyłem czytać książki, ale na razie nie znalazłem wystarczającej ilości informacji na temat wyboru tego języka.

Czy ktoś może mi powiedzieć, dlaczego Martin Odersky, który naprawdę wydaje się dbać o efekty uboczne funkcji, wybiera zamknięcia, aby móc uchwycić obaval ivar, zamiast tylkoval?

Jakie są zalety i wady implementacji Java i Scala?

Dzięki

Podobne pytanie:W przypadku zamknięć Scala, kiedy przechwycone zmienne zaczynają żyć na stercie JVM?

questionAnswers(2)

yourAnswerToTheQuestion