gpt4 book ai didi

scala - scala 中的函数/方法引用相等性

转载 作者:行者123 更新时间:2023-12-02 08:25:51 25 4
gpt4 key购买 nike

您好,是否可以检查方法/函数引用是否等于 Scala 中的另一个?例如编写如下函数并得到 true?

scala> def m = 1
m: Int

scala> def check(p: () => Int): Boolean = p == m _
check: (p: () => Int)Boolean

scala> check(m _)
res0: Boolean = false

最佳答案

不存在对方法的引用这样的东西。当您编写 m _ 时,您正在将 m eta 扩展为一个函数。函数的实例。

可以引用检查函数(分配给 vals 或 vars),但仅供引用。

def m = 1

val mx = m _
val my = m _ // not the same function as `mx` !
val mz = mx

scala> mx == mx
res4: Boolean = true

scala> mx == my
res5: Boolean = false

scala> mz == mx
res6: Boolean = true

mx 等于它自己(通过引用),但是虽然它在逻辑上等于 my,但它是由一个单独的 eta 扩展创建的,因此不具有引用相等性。另一方面,mz 确实持有与 mx 相同的引用。

最重要的是,将一个新的 eta 扩展方法与另一个函数进行比较将总是产生错误。哪怕是它自己。

scala> m _ == m _
<console>:12: warning: comparing a fresh object using `==' will always yield false
m _ == m _
^
res10: Boolean = false

关于scala - scala 中的函数/方法引用相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250291/

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