Diberikan tiga cara untuk mengekspresikan fungsi yang sama f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Apa perbedaan definisi ini? REPL tidak menunjukkan perbedaan yang jelas:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
di REPL menunjukkan nilai yang terikat secara statisf1
saat mengevaluasif2
danf3
menampilkan hasil pemanggilan metode tersebut. Secara khusus,Function1[Int, Int]
instance baru diproduksi setiap kali salah satuf2
atauf3
dipanggil, sementaraf1
itu samaFunction1[Int, Int]
selamanya.