问题在于您使用花括号和括号的方式map
。括号内的所有内容都将被视为 scala 代码。您将无法使用 html 并按@
预期使用它。在花括号内,您可以使用所需的@
方式。
例如,这不会编译并会引发expected start of definition
:
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map( t => {
<h4>@t._1</h4>
@t._2
})
另一方面,这将按照预期的方式编译和工作:
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map{ t =>
<h4>@t._1</h4>
@t._2
}
我在模板解析 scala 代码的方式上遇到了问题。我不完全确定他们是否按照 scala 编译器解析 scala 代码的方式解析它。我之前读过,有一些限制。我稍后会向您展示一个。如果您切换花括号,您的解决方案可以编译并正常工作。你最终会得到类似的东西:
@(tests: List[(String,Option[List[String]])])
<h3>Tests results</h3>
@tests.map{ t =>
<h4>@t._1</h4>
@defining(t._2) { optLst =>
@optLst match {
case None => {
<p>
<span>
[WARNING] Test failed
</span>
</p>
}
case Some(res) => {
@res.map{r =>
<p>
<span>
@r
</span>
</p>
}
}
}
}
}
这不是最惯用的方法。我可能会在那里使用地图而不是模式匹配。但是使用适合你的东西。这里的重点是@defining
那里。你注意到了吗?如果您尝试直接与 t._2 匹配,则会出现')' expected but 'case' found.
异常。对我来说有什么奇怪的。而且我之前发现过,并且我在谷歌上搜索了很多,发现这是当前引擎中的一个问题,你必须定义值,然后按照你想要的方式匹配它。
干杯!