Đư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>
f1trong REPL hiển thị giá trị được liên kết tĩnhf1trong khi đánh giáf2vàf3hiể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 khif2hoặcf3được gọi ra, trong khi đóf1là phiên bảnFunction1[Int, Int]vĩnh viễn.