Dati tre modi per esprimere la stessa funzione f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
In cosa differiscono queste definizioni? Il REPL non indica differenze evidenti:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
in REPL mostra il valore staticamente vincolato af1
durante la valutazionef2
ef3
mostra il risultato dell'invocazione di quei metodi. In particolare, una nuovaFunction1[Int, Int]
istanza viene prodotta ogni voltaf2
of3
viene invocata, mentref1
è la stessaFunction1[Int, Int]
per sempre.