Scala`match`和`val`不能在视图模板中编译
我在Play 2.0模板中有以下代码:
@content.toString.lines.map{
case line => // i put `case` here as another attempt to make it work
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li> /*CRASH*/
}
}
它在标记行失败,说not found: value line
。 它的第二个变体:
@for(line <- content.toString.lines){
@line match { /*CRASH*/
case "" => @Html("")
case _ => <li>@Html(line)</li>
}
}
在标志线上失败,声称'case' expected but identifier found
。
更新:
val
同样的事情:
@val headID = "head"
出现了illegal start of simple expression
。
更新结束
我想知道,我在做什么错误,以及如何在Play的模板中正确实现match-case
结构和val
赋值?
在模板中使用match
表达式
您需要在括号(“{”和“}”)中包含模板的HTML内容:
@for(line <- content.toString.lines) {
@line match {
case "" => { }
case _ => { <li>@Html(line)</li> }
}
}
在你的具体情况下,下面的代码会读取更好的恕我直言:
@content.toString.lines.collect {
case line if !line.isEmpty => { <li>@Html(line)</li> }
}
定义值
您可以使用defining[T](value: T)(usage: T => Html)
助手来定义值:
@defining(1 + 2 * 3) { value =>
<div>@value</div>
}
我发现在外面添加一个{}以包含整个代码会起作用
@{content.toString.lines.map{ line =>
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li>
}}
以下似乎为我工作
@content.toString.lines.map{ line =>
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li>
}
但是你可以看一下play项目目录中的target/scala-2.9.1/src_managed/main/views/html/index.template.scala
来查看它在字符串文字中的内容。
至于val的分配,我不知道,但@定义可能有帮助
链接地址: http://www.djcxy.com/p/62633.html上一篇: Scala `match` and `val` do not compile in a view template