Fechamentos de Scala comparados a innerclasses de Java -> VS final var

Eu fiz primeiramente esta pergunta sobre o uso definal com classes internas anônimas em Java:Por que usamos a palavra-chave final com classes internas anônimas?

Na verdade, estou lendo o livro Scala de Martin Odersky. Parece que o Scala simplifica muito código Java, mas para os encerramentos do Scala eu pude notar uma diferença significativa.

Enquanto em Java nós "simulamos" closures com uma classe interna anônima, capturando uma variável final (que será copiada para viver no heap ao invés da pilha), parece que no Scala podemos criar um fechamento que pode capturar um val, mas também um var e, portanto, atualizá-lo na chamada de fechamento!

Então, é como podemos usar uma innerclass anônima Java sem ofinal palavra chave! Eu não terminei de ler o livro, mas por enquanto não encontrei informações suficientes sobre essa escolha de design de linguagem.

Alguém pode me dizer por que Martin Odersky, que realmente parece cuidar dos efeitos colaterais da função, escolhe closures para capturar os doisval evar, em vez de apenasval?

Quais são os benefícios e desvantagens das implementações Java e Scala?

obrigado

Questão relacionada:Com os fechamentos do Scala, quando as variáveis ​​capturadas começam a viver no heap da JVM?

questionAnswers(2)

yourAnswerToTheQuestion