gpt4 book ai didi

scala - Scala 中的函数相等,是 Scala 中的函数对象吗?

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

我正在阅读《Scala 编程》一书。在书中,它说“一个函数文字被编译成一个类,当在运行时实例化时它是一个函数值”。并且它提到“函数值是对象,因此您可以根据需要将它们存储在变量中”。

所以我尝试检查函数之间的相等性。但我失败了。

  • 如果函数是 Scala 中的对象,那么它的行为应该与 Scala 中的其他对象一样。也许检查函数的相等性是没有意义的,所以它被禁用了?
  • 在 Scala 中函数会被编译成对象吗?
  • 最佳答案

    Lambda 被编译为匿名类(我记得不是 case 类)。这意味着如果你这样做:

    val f1: (String) => String = _ => "F1"
    val f2: (String) => String = _ => "F2"

    两者 f1f2Function1[String,String] 的子类型,但它们属于不同的匿名类,所以不能相等。

    如果你把它写成:

    case class F(res: String) extends ((String) => String) {
    def apply(s: String) = res
    }

    然后:

    val f1: (String) => String = F("A")
    val f2: (String) => String = F("A")
    f1 == f2 // true

    关于scala - Scala 中的函数相等,是 Scala 中的函数对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570251/

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