Tôi không biết Lift, nhưng đây là một câu hỏi chung. Trước hết, các ::
là một khuyết điểm điều hành Scala:
scala> 1 :: 2 :: List(3, 4)
res0: List[Int] = List(1, 2, 3, 4)
Điều này có nghĩa rằng super.validations
là một số loại một chuỗi và valMinLen(3, "Link URL must be at least 5 characters") _
là một giá trị duy nhất trong danh sách đó.
Từ ngữ cảnh có vẻ hiển nhiên là phương pháp validations
bị ghi đè mà họ đang gọi super
phiên bản và sẽ thêm một số xác thực bổ sung ngay từ đầu.
Xác thực bổ sung này được tạo bằng cách gọi tới valMinLen()
. Tuy nhiên, cuộc gọi bổ sung này không trả về một phần tử phù hợp với loại danh sách validations
- nhưng là một hàm. Thay vì việc thêm trước giá trị hàm, chúng ta đang nói rõ ràng (bằng cách thêm _
hậu tố`) mà chúng ta muốn thêm vào một hàm, chứ không phải một giá trị trả về của hàm đó.
đoạn Mã trị giá một ngàn chữ:
scala> def f = 3
f: Int
scala> def g = 4
g: Int
scala> val listOfInts = List(f, g)
listOfInts: List[Int] = List(3, 4)
scala> val listOfFunctions = List(f _, g _)
listOfFunctions: List[() => Int] = List(<function0>, <function0>)
Hãy so sánh các loại listOfInts
và listOfFunctions
. Tôi tin rằng cú pháp f _
được gọi là chức năng được áp dụng một phần trong thế giới Scala.
Nguồn
2012-01-10 18:42:21
Vì vậy, bạn có thể tham chiếu 'minimumValidation' trước khi bạn khai báo? – ziggystar
Thứ tự tuyên bố không quan trọng trong scala, nó không có trong hầu hết các ngôn ngữ hiện tại. – Ramses