在Scala模板的List中向字符添加字符串

时间:2013-12-05 13:14:55

标签: scala playframework playframework-2.0

我有一个对象列表,并希望迭代此列表中的每个元素以获取其Id字符串。这些字符串必须保存到另一个列表中。我总是得到这个编译器错误:

    [error] FilePath:line:64: illegal start of simple expression
    [error]                 @var formNameList : Array[String] = new Array[String](formList.size())
    [error]                  ^
    [error] File Path:69: ')' expected but '}' found.
    [error]     }
    [error]       ^
    [error] two errors found
    [error] (compile:compile) Compilation failed
    [error] Total time: 3 s, completed 05.12.2013 14:03:37

所以,在我开车疯了之前请大家帮帮忙。

我的代码:

@var formNameList : Array[String] = new Array[String](formList.size())
     @for(i <- 0 until formList.size()) {
            @formNameList.add(formList.get(i).getFormId())
     }
     @views.html.formmanager.showresults(formNameList, formManager)

我是Scala中的新手,这是一个非常简单的Java任务,但Scala是一种非常强硬的语言。它也很难读:这是什么。:::,:::或者这个&lt; ++ =意味着什么?

1 个答案:

答案 0 :(得分:3)

简短回答:

@views.html.formmanager.showresults(formList.map(_.getFormId).toArray, formManager)

答案很长:

Scala模板是模板 - 它们应该用于生成一些数据表示,而不能用作通用代码的占位符。我强烈建议不要在模板内进行任何可变或复杂的计算。如果你有复杂的代码,你应该将它作为参数传递或创建一个这样的辅助对象:

# in helper.scala:
object Helper {
  def toArrayOfIds(formList:List[Form]) = formList.map(_.getFormId).toArray
}
# in view.scala.html:
@Helper.toArrayOfIds(formList)

另一件事 - 更喜欢列表到数组。通常我从不在我的scala程序中使用Array。另请注意使用高阶函数map而不是创建数组,手动填充它。强烈建议这样做。只要看看第一个例子有多短。

.:::::: <++=在不同的背景下可能意味着不同的东西。通常前两个运算符意味着相同的事情,即两个列表的串联。您可以在Martin Odersky的“Scala编程”中了解这一点,第一版可以免费获得。

如果您需要在模板中引入新变量,您可以这样做:

@defining(user.firstName + " " + user.lastName) { fullName =>
  <div>Hello @fullName</div>
}

请参阅play documentation