您好,是否可以检查scala中的方法/函数引用是否等于另一个?例如,编写如下的函数并获得真实?
scala> def m = 1
m: Int
scala> def check(p: () => Int): Boolean = p == m _
check: (p: () => Int)Boolean
scala> check(m _)
res0: Boolean = false
Run Code Online (Sandbox Code Playgroud)
没有对方法的引用.当你写作时,m _你会逐渐扩展m到一个功能.一个新的功能的实例.
您可以参考检查功能(分配给val或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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)