2012-04-21 12 views
10

Praktykowanie co jest napisane tutaj: ScalaForms, Stworzyłem następującą postać:Zagraj postać 2.0 - pole „weryfikacji” metoda nie jest członkiem

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

jednak błąd na verifying stwierdza, że ​​value verifying is not a member of (java.lang.String, play.api.data.Mapping[Int]).

Praca z mapping zamiast z tuple, jak w przywołanym przykładzie, nie robi różnicy. Co jest nie tak?

Odpowiedz

9

Według Scala operators precedence rules metody zaczynające się literą mają niższy priorytet niż inni, więc kiedy piszesz:

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

Kompilator tworzy następujące wyrażenie:

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

Które nie to, co jest chcesz! Możesz przepisać go w następujący sposób:

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

I obecna dokumentacja Play jest nieprawidłowa. Dzięki za złapanie!

+0

Dwa lata temu dokumentacja nadal jest błędna. Nie wydaje się również, aby rozwiązać "nazwę" -> weryfikacja tekstu (wymagana) błąd kompilacji dokumentacji. – halt00

+0

Bieżąca dokumentacja jest poprawna: https://www.playframework.com/documentation/2.3.x/ScalaForms –

Powiązane problemy