微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与Java内部类相比,Scala闭包->最终VS var

我首先问了有关在Java中将final与匿名内部类一起使用的问题:
Why do we use final keyword with anonymous inner classes?

我实际上正在阅读Martin Odersky的Scala书.看来Scala简化了许多Java代码,但是对于Scala闭包,我可以注意到一个明显的不同.

在Java中,我们使用匿名内部类“模拟”闭包,捕获最终变量(该变量将被复制以驻留在堆中而不是堆栈中),在Scala中,我们似乎可以创建可以捕获val的闭包,但是也是一个var,因此可以在闭包调用中对其进行更新!

就像我们可以在不使用final关键字的情况下使用Java匿名内部类一样!
我还没有读完这本书,但是到目前为止,我没有找到关于这种语言设计选择的足够信息.

有人可以告诉我为什么似乎真正照顾到函数副作用的Martin Odersky选择闭包来同时捕获val和var而不是只捕获val吗?

Java和Scala实现的优点和缺点是什么?

谢谢

相关问题:
With Scala closures, when do captured variables start to live on the JVM heap?

解决方法:

可以看到一个对象是一个封闭的包,它们共享对同一环境的访问,并且该环境通常是可变的.那么,为什么要使从匿名函数生成的闭包的功能降低呢?

同样,具有可变变量和匿名函数的其他语言也以相同的方式工作.租赁惊奇原则. Java实际上很奇怪,不允许内部类捕获可变变量.

有时它们只是有用的.例如,自我修改的thunk可以创建您自己的延迟或将来处理的变体.

缺点?它们具有共同的可变状态的所有缺点.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐