Dadas tres formas de expresar la misma función f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
¿En qué se diferencian estas definiciones? El REPL no indica diferencias obvias:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
en el REPL muestra el valor vinculado estáticamente alf1
evaluarf2
yf3
muestra el resultado de invocar esos métodos. En particular,Function1[Int, Int]
se produce una nueva instancia cada vez que se invocaf2
of3
, mientras quef1
es la mismaFunction1[Int, Int]
para siempre.