Даны три способа выражения одной и той же функции 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]
навсегда.