我有一个对象列表,并希望迭代此列表中的每个元素以获取其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; ++ =意味着什么?
答案 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>
}