2
這有幫助StackOverflow answer指出不可能比較兩個函數。FunctionN#==評估爲False
對於下面,我得到'假的,符合市場預期:
高清
scala> def add1Test: Int => Int = { println("3"); _ + 1 }
add1Test: Int => Int
scala> add1Test == add1Test
3
3
res4: Boolean = false
scala> :t add1Test(5)
Int
功能1
scala> def foo: Function1[Int, Int] = _ + 1
foo: Int => Int
scala> :type foo
Int => Int
scala> foo == foo
res6: Boolean = false
VAL
但是,對於val
,我會得到結論。
scala> val valAdd1: Int => Int = { println("val"); _ + 1}
val
valAdd1: Int => Int = <function1>
scala> valAdd1 == valAdd1
res3: Boolean = true
scala> :t valAdd1
Int => Int
爲什麼比較def
和Function
結果假,但是真正爲val
?
此外,比較def
和Function
時,爲什麼是錯誤的,而不是其他行爲(例如拋出異常)?
啊。所以'def'和'Function'的平等比較發生在內存中的不同對象上,這就解釋了'false'。如果每個對象具有相同的內存地址,那麼比較'val's'的結果是'true'。謝謝 –