在此示例Play框架代码(表单映射)中使用unapply有什么用?

Era*_*dan 8 scala playframework playframework-2.0

我是Play框架的新手,并且已经过了2.1 样本,在这个computer-database例子中,我发现了以下不完全理解的表单定义.

什么是角色Computer.applyComputer.unapply在这里?

  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)
  )
Run Code Online (Sandbox Code Playgroud)

(来自controllers/Application.scala)

编辑:这似乎是一个很好的资源:https://groups.google.com/forum/?fromgroups =#!topic/play-framework/dxNQ8E81YJs但仍不确定我完全了解全局.

Jul*_*ont 5

您应该了解Scala上下文中应用/取消应用的内容,因为它不是特定于Play2 /表单.

在apply方法中,我们获取所需的参数并返回我们感兴趣的类的新实例,因为我们在unapply中执行反向操作 - 我们获取实例并提取所需信息并以元组的形式返回它们.

简而言之:apply用于从参数构造计算机对象.unapply用于相反的情况,从Computer对象中提取参数.


gou*_*ama 5

当您想要将表单绑定到案例类的字段(在本例中Computer)时,这是 Play 中的常见模式。

mapping方法允许您提供构造和解构函数,这些函数将被调用以填充表单并从中提取数据。

由于在这里您想要转到/来自Computer,因此您需要一种方法来创建Computerfrom 参数,以及一种从 a 中提取参数的方法Computer,这正是Computer.applyand Computer.unapply

相关示例: Play 文档中关于表单的映射示例。