Закрытия Scala по сравнению с внутренними классами Java -> final VS var
Мы сначала задали этот вопрос об использованииfinal
с анонимными внутренними классами в Java:Почему мы используем ключевое слово final с анонимными внутренними классами?
Я фактически читаю книгу Скалы Мартина Одерского. Кажется, Scala значительно упрощает Java-код, но для замыканий Scala я мог заметить существенную разницу.
Пока на Java мыимитировать» замыкания с анонимным внутренним классом, захватив конечную переменную (которая будет скопирована для хранения в куче, а не в стеке), кажется, в Scala мы можем создать замыкание, которое может захватывать val, но также и var, и, таким образом, обновлять это в закрытии вызова!
Так что мы можем использовать анонимный внутренний класс Java безfinal
ключевое слово! Я'мы не закончили читать книгу, но пока я нене могу найти достаточно информации об этом выборе языка дизайна.
Может кто-нибудь сказать мне, почему Мартин Одерски, который, кажется, действительно заботится о функции?s побочные эффекты, выберите замыкания, чтобы иметь возможность захватить обаval
а такжеvar
, а не только?val
Каковы преимущества и недостатки реализаций Java и Scala?
Спасибо
Связанный вопрос:В случае закрытий Scala когда захваченные переменные начинают жить в куче JVM?