final
私は最初に、Javaでの匿名内部クラスで
の使用についてこの質問をしました。なぜ匿名内部クラスでfinalキーワードを使用するのですか?
私は実際にMartinOderskyのScalaの本を読んでいます。Scalaは多くのJavaコードを単純化しているようですが、Scalaクロージャの場合、大きな違いに気付くことができました。
Javaでは、匿名の内部クラスを使用してクロージャを「シミュレート」し、最終変数(スタックではなくヒープ上に存在するようにコピーされます)をキャプチャしますが、Scalaでは、valをキャプチャできるクロージャを作成できるようですが、また、varであるため、クロージャ呼び出しで更新します。
final
つまり、キーワードなしでJava匿名内部クラスを使用できるようなものです。私は本を読み終えていませんが、今のところ、この言語デザインの選択に関する十分な情報を見つけることができませんでした。
関数の副作用を本当に処理しているように見えるMartinOderskyが、クロージャを選択して、だけでなく、val
との両方をキャプチャできるようにする理由を誰かに教えてもらえますか?var
val
JavaとScalaの実装の長所と短所は何ですか?
ありがとう