Bei drei Möglichkeiten, dieselbe Funktion auszudrücken f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Wie unterscheiden sich diese Definitionen? Die REPL weist keine offensichtlichen Unterschiede auf:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
in der REPL den Wert anzeigt, an den sief1
während der Auswertung statisch gebunden ist,f2
undf3
das Ergebnis des Aufrufs dieser Methoden anzeigt . InsbesondereFunction1[Int, Int]
wird jedes Mal eine neue Instanz erstelltf2
oderf3
aufgerufen, während sie für immerf1
dieselbe istFunction1[Int, Int]
.