0
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"
4

1 回答 1

1

让我们从 Play2 Scaladoc 开始。您正在调用的 Form 方法是Form.apply

形成 scaladoc

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]

所以这个方法接受(a1,a2,a3,a4)每个类型的第一个参数列表(String,Mapping[Aindex]),一个包含单个参数的另一个apply: (A1, A2, A3, A4) ⇒ R参数列表,以及一个包含单个参数的最后一个参数列表。unapply: (R) ⇒ Option[(A1, A2, A3, A4)]

通常,对于所有重载版本的映射,签名强加使得 apply / unapply 应该具有对应于第一个参数列表的元组版本的签名

这里发生的是,通过->你创建5 个 (String,Mappings[Asomething])元组,而你apply/unapply只有3 个参数

于 2013-09-24T14:30:37.450 回答