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"
让我们按顺序,从Play2 Scaladoc开始。您正在调用的 Form 方法Form.apply
形成斯卡拉多克
def apply[T](mapping: (String, Mapping[T])): Form[T]
所以你的映射(smth)应该返回一个(String,Mapping[T])
。映射方法改为在对象Forms
中定义
表单 Scaladoc
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]
因此,此方法采用(String,Mapping[Aindex])
类型(a1,a2,a3,a4)
的第一个参数列表,另一个包含单个参数apply: (A1, A2, A3, A4) ⇒ R
的参数列表,以及包含单个参数的最后一个参数列表unapply: (R) ⇒ Option[(A1, A2, A3, A4)]
通常,对于所有重载版本的映射,签名强加使得应用/取消应用应该具有对应于第一个参数列表的更新版本的签名。
这里发生的事情是,通过->
您正在创建 5 个(String,Mappings[Asomething])
元组,而您的apply/unapply
只有 3 个参数