Étant donné trois manières d'exprimer la même fonction f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
En quoi ces définitions diffèrent-elles? Le REPL n'indique aucune différence évidente:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
dans la REPL montre la valeur liée statiquementf1
lors de l'évaluationf2
etf3
affiche le résultat de l' appel de ces méthodes. En particulier, une nouvelleFunction1[Int, Int]
instance est produite à chaque fois quef2
ouf3
est invoquée, alors qu'ellef1
est la mêmeFunction1[Int, Int]
pour toujours.