Даны три способа выражения одной и той же функции f(a) := a + 1:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Чем отличаются эти определения? REPL не указывает очевидных различий:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1в REPL показывает значение, статически связанное сf1оценкой,f2иf3показывает результат вызова этих методов. В частности, новыйFunction1[Int, Int]экземпляр создается каждый раз , когда вызывается либо,f2либоf3, аf1остается неизменнымFunction1[Int, Int]навсегда.