2012-04-21 29 views
10

Thực hành những gì được viết ở đây: ScalaForms, tôi đã tạo ra các hình thức sau đây:Chơi dạng 2.0 - lĩnh vực "xác minh" phương pháp không phải là một thành viên

val personCreationForm = Form(
    tuple (
     "name" -> nonEmptyText, 
     "age" -> number verifying (min(0), max(100))  /*ERROR*/ 
    ) verifying ("Wrong entry", result => result match { 
     case (name, age) => true 
    }) 
) 

Tuy nhiên, các lỗi trên verifying khẳng định rằng value verifying is not a member of (java.lang.String, play.api.data.Mapping[Int]).

Làm việc với mapping thay vì tuple, như trong ví dụ được tham chiếu, không có sự khác biệt. Có gì sai ở đây?

Trả lời

9

Theo Scala operators precedence rules, phương pháp bắt đầu bằng chữ cái có một ưu tiên thấp hơn những người khác vì vậy khi bạn viết:

"age" -> number verifying (min(0), max(100)) 

Trình biên dịch xây dựng các biểu thức sau đây:

("age" -> number) verifying (min(0), max(100)) 

Mà không phải những gì là bạn muốn! Bạn có thể viết lại như sau:

"age" -> number.verifying(min(0), max(100)) 
"age" -> (number verifying (min(0), max(100))) 

Và tài liệu Play hiện tại sai. Cảm ơn vì đã bắt nó!

+0

Hai năm trước và tài liệu vẫn sai. Nó cũng không có vẻ để giải quyết các "tên" -> văn bản xác minh (yêu cầu) tài liệu biên dịch lỗi. – halt00

+0

Tài liệu cập nhật là chính xác: https://www.playframework.com/documentation/2.3.x/ScalaForms –

Các vấn đề liên quan