Biorąc pod uwagę trzy sposoby wyrażenia tej samej funkcji f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Czym różnią się te definicje? REPL nie wskazuje żadnych oczywistych różnic:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
w REPL pokazuje wartość statycznie związanąf1
podczas obliczaniaf2
if3
pokazuje wynik wywołania tych metod. W szczególności nowaFunction1[Int, Int]
instancja jest tworzona za każdym razem , gdy jest wywoływanaf2
lubf3
jest wywoływana, podczas gdyf1
jest taka sama naFunction1[Int, Int]
zawsze.