Play 2.0模板中的object.member模式匹配

kes*_*kes 7 templates scala pattern-matching playframework playframework-2.0

根据Play 2.0文档,模式匹配可以在模板中完成,如下所示:

@connected match {

  case models.Admin(name) => {
    <span class="admin">Connected as admin (@name)</span>
  }

  case models.User(name) => {
    <span>Connected as @name</span>
  }   
}
Run Code Online (Sandbox Code Playgroud)

将case表达式后的括号之间的文本视为输出(例如HTML),这非常方便.

但是,当尝试使用不是简单变量的匹配表达式时,例如object.member,如下所示:

@album.year match {
   case Some(y: Int) => { @y }
   case None => { <b>nope</b> }
}
Run Code Online (Sandbox Code Playgroud)

它导致编译错误: "')' expected but 'case' found."

使用defining表达式绑定到一个简单的变量,如下所示:

@defining(album.year) { foo =>
  @foo match {
        case Some(y: Int) => { @y }
        case None => { <b>nope</b> }
      }
  }
Run Code Online (Sandbox Code Playgroud)

工作,但似乎有点麻烦.

是否有正确的方法在涉及对象和成员的表达式上使用此模式匹配功能(例如album.year)?

kes*_*kes 1

目前不可能(在版本 2.0.1 中),因为它是一个已确认的错误:

https://play.lighthouseapp.com/projects/82401/tickets/46-support-more-complex-match-statement