Java,Play2.0,')'预计但'='找到播放

时间:2012-03-21 14:55:42

标签: java scala playframework

当我尝试创建标记时,我按照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的新手,有人告诉我为什么?

2 个答案:

答案 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>
  }

}