根据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>
}
}
case 表达式后面的括号之间的文本被视为输出(例如 HTML),这非常方便。
但是,当尝试使用不是简单变量的匹配表达式时,例如 object.member,如下所示:
@album.year match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
它会导致编译错误:
"')' expected but 'case' found."
用于将defining
表达式绑定到一个简单的变量,如下所示:
@defining(album.year) { foo =>
@foo match {
case Some(y: Int) => { @y }
case None => { <b>nope</b> }
}
}
工作,但它似乎有点麻烦。
是否有适当的方法在涉及对象和成员(例如album.year
)的表达式上使用此模式匹配功能?