กำหนดสามวิธีในการแสดงฟังก์ชันเดียวกันf(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
คำจำกัดความเหล่านี้แตกต่างกันอย่างไร? REPL ไม่ได้ระบุถึงความแตกต่างที่ชัดเจน:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
ใน REPL จะแสดงค่าคงที่f1
ในขณะที่ประเมินf2
และf3
แสดงผลลัพธ์ของการเรียกใช้วิธีการเหล่านั้น โดยเฉพาะอย่างยิ่งFunction1[Int, Int]
อินสแตนซ์ใหม่จะถูกสร้างขึ้นทุกครั้งf2
หรือf3
ถูกเรียกใช้ในขณะที่f1
จะเหมือนเดิมFunction1[Int, Int]
ตลอดไป