val computerForm = Form(
mapping(
"id" -> ignored(NotAssigned:Pk[Long]),
"name" -> nonEmptyText,
"introduced" -> optional(date("yyyy-MM-dd")),
"discontinued" -> optional(date("yyyy-MM-dd")),
"company" -> optional(longNumber)
)(Computer.apply)(Computer.unapply)
)
这段代码给出了错误的方法映射参数:
(apply: (String, String, String) => R)(unapply: R => Option[(String, String, String)])play.api.data.Mapping[R]..please solve this issue"
答案 0 :(得分:1)
让我们从Play2 Scaladoc开始吧。您调用的Form方法是Form.apply
def apply[T](mapping: (String, Mapping[T])): Form[T]
所以你的映射(smth)应该返回(String,Mapping[T])
。相反,映射方法在对象Forms
Forms.mapping是一个带有多个可用签名的重载方法,让我们来看一个
def
mapping[R, A1, A2, A3, A4](a1: (String, Mapping[A1]), a2: (String, Mapping[A2]), a3: (String, Mapping[A3]), a4: (String, Mapping[A4]))(apply: (A1, A2, A3, A4) ⇒ R)(unapply: (R) ⇒ Option[(A1, A2, A3, A4)]): Mapping[R]
因此,此方法采用类型为(a1,a2,a3,a4)
的第一个参数列表(String,Mapping[Aindex])
,另一个包含单个参数apply: (A1, A2, A3, A4) ⇒ R
的参数列表,以及包含单个参数的最后一个参数列表unapply: (R) ⇒ Option[(A1, A2, A3, A4)]
通常,对于所有重载版本的映射,签名强制使得apply / unapply应该具有对应于第一个参数列表的 tupled 版本的签名。
这里发生了什么,是通过->
您正在创建 5 (String,Mappings[Asomething])
元组,而您的apply/unapply
只有 3 参数