gpt4 book ai didi

scala - lambdas 在 Scala 中是如何工作的,它们是在匿名类之上运行的吗?

转载 作者:行者123 更新时间:2023-12-04 19:07:28 27 4
gpt4 key购买 nike

标题可能有点困惑,所以让我详细说明一下,我一直在阅读一些关于 Scala 的批评。这是一封来自 Coda Hale (Yammer's Infrastructure Architect) 发送给 Tyepsafe 的电子邮件,内容涉及 Scala 的一些缺陷。 ,所以引用:

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.



所以,从这里,我有几个关于 Scala 中的 lambda 是如何工作的问题:
  • 自由函数和绑定(bind)到匿名类的函数有什么区别(从技术上讲,并非所有函数都绑定(bind)到 main 单例对象)?
  • 使用匿名类绑定(bind)函数而不是自由函数对性能有什么影响?
  • 最佳答案

    是的,lambda 仍然是对象,是匿名类的实例。

    这就是 JVM 的工作方式,全部 引用是对象。您可以拥有引用或值(原语),并且无法绕过它。

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

    另外值得注意的是,JVM 经常可以对抽象类(比如 Scala 的函数)进行逃逸分析,并优化掉这些。

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

    鉴于上述所有情况,不可能对 Scala 函数实现的性能做出一般性陈述,这取决于您的特定代码/用例。一般来说,我不会担心,除非你遇到一个极端情况,即你的分析器在这里查明问题(这不太可能)

    关于scala - lambdas 在 Scala 中是如何工作的,它们是在匿名类之上运行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858227/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com