当我尝试创建标记时,我按照play2.0文档中的“Common template use cases”进行操作。
@(level: String = "error")(body: (String) => Html)
@level match {
case "success" => {
<p class="success">
@body("green")
</p>
}
case "warning" => {
<p class="warning">
@body("orange")
</p>
}
case "error" => {
<p class="error">
@body("red")
</p>
}
}
然后刷新页面http://localhost:9000,收到错误说:
')' expected but '=' found.
In foo/app/views/tags/notice.scala.html at line 4.
1#{extends 'main.html' /}
2#{set title:'notice.scala.html' /}
3
4@(level: String="error")(body: (String) => Html)
5
6@level match {
7
8 case "success" => {
既然我是play2.0和scala的新手,有人告诉我为什么?
答案 0 :(得分:2)
在自己的参数组中有一个默认参数没有意义:
@(level: String = "error")(body: (String) => Html)
注意Scala templates common use cases处的示例“moreScripts and moreStyles”如何将默认参数与另一个参数放在一起:
@(title: String, scripts: Html = Html(""))(content: Html)
您也可以这样做:
@(body: (String) => Html, level: String = "error")
旁注:依靠字符串来区分成功/警告/错误并不是一个好主意。字符串很脆弱并且会受到拼写错误的影响,这会以烦人的方式隐藏错误。相反,寻找一种数据类型,或创建自己的数据类型来表示这种情况:拼写错误会成为编译错误。
class ResultType
case object Success extends ResultType
case class Warning(message: String) extends ResultType
case class Error(message: String) extends ResultType
答案 1 :(得分:-2)
我想你应该试试
@(level: (String) => "error")(body: (String) => Html)
@level match {
case "success" => {
<p class="success">
@body("green")
</p>
}
case "warning" => {
<p class="warning">
@body("orange")
</p>
}
case "error" => {
<p class="error">
@body("red")
</p>
}
}