加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

lambda在Scala中如何工作,它们是否在匿名类之上运行?

发布时间:2020-12-16 18:16:20 所属栏目:安全 来源:网络整理
导读:标题可能有点令人困惑,所以让我详细说明,我一直在阅读一些关于 Scala的批评.这是一封发送给Tyepsafe的电子邮件,内容是关于Scala从 Coda Hale (Yammer’s Infrastructure Architect)开始的一些不足之处,所以引用: we stopped seeing lambdas as free and sta
标题可能有点令人困惑,所以让我详细说明,我一直在阅读一些关于 Scala的批评.这是一封发送给Tyepsafe的电子邮件,内容是关于Scala从 Coda Hale (Yammer’s Infrastructure Architect)开始的一些不足之处,所以引用:

we stopped seeing lambdas as free and started seeing them as syntactic sugar on top of anonymous classes and thus acquired the same distaste for them as we did anonymous classes.

所以,从这一点来看,我有几个关于lambda如何在Scala中工作的问题:

>自由函数和绑定到匿名类的函数之间的区别是什么(技术上,并非所有函数都绑定到主单例对象)?
>使用匿名类绑定函数而不是自由函数对性能有何影响?

解决方法

是的,lambdas仍然是对象,匿名类的实例.

这就是JVM的工作原理,所有引用都是对象.你可以有引用或值(原语),但没有办法解决它.

Java的更高版本具有MethodHandles.但值得注意的是,MethodHandle仍然只是一个抽象类 – 尽管JVM特别知道如何在运行时优化.

另外值得注意的是,JVM通常可以对抽象类(例如Scala的函数)执行转义分析,并对它们进行优化.

除此之外,Scala可以使用带有apply方法的任何对象,就像它是一个Function一样.在这种情况下,显式调用apply将在字节码中发出,而您不再处理匿名类.

鉴于上述所有内容,不可能对Scala函数实现的性能做出一般性陈述,这取决于您的特定代码/用例.一般情况下,我不会担心,除非你碰到一个角落案例,你的探查器在这里指出了一个问题(这是非常不可能的)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读