Aynı işlevi ifade etmenin üç yolu verildiğinde f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Bu tanımlar nasıl farklılık gösterir? REPL herhangi bir bariz farklılığı göstermez:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
değeri statik olarak bağlı REPL gösterirf1
değerlendirirkenf2
vef3
sonucunu göstermek çağırarak bu yöntemleri. Özellikle,Function1[Int, Int]
her seferinde yaf2
daf3
çağrıldığında yeni bir örnek üretilirken , sonsuza kadarf1
aynıdırFunction1[Int, Int]
.