Đưa ra ba cách thể hiện cùng một hàm f(a) := a + 1
:
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
Làm thế nào để các định nghĩa này khác nhau? REPL không chỉ ra bất kỳ sự khác biệt rõ ràng nào:
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
f1
trong REPL hiển thị giá trị được liên kết tĩnhf1
trong khi đánh giáf2
vàf3
hiển thị kết quả của việc gọi các phương thức đó. Cụ thể, một phiên bản mớiFunction1[Int, Int]
được tạo ra mỗi khif2
hoặcf3
được gọi ra, trong khi đóf1
là phiên bảnFunction1[Int, Int]
vĩnh viễn.