Этот полезный 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
Function1
scala> def foo: Function1[Int, Int] = _ + 1
foo: Int => Int
scala> :type foo
Int => Int
scala> foo == foo
res6: Boolean = false
вал
Однако, для 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', учитывая, что каждый объект имеет одинаковый адрес памяти. благодаря –