@(css: Option[String])(content: Html)(customJS: Option[Array[String]])
@for(js <- customJS if !customJS.isEmpty) {
<script src="@routes.Assets.at(js)"></script>
}
我正在为这个小小的理解而写作,它将循环并打印出uri String。由于可能是none或一个字符串数组,我使用了Option
。
然后来自类型安全激活器的编译器告诉我,@routes.Assets.at()
应该是String
而不是Array[String]
。我很震惊,因为js应该是String
对吗?
然后我试着这样写:
@for(js <- customJS if !customJS.isEmpty) {
@var uri = js
<script src="@routes.Assets.at(js)"></script>
}
然后编辑说,增加的行是“简单表达”的非法开始。
这不是一个简单的表达!这是{}
的完全理解!此外,我最终被迫使用js.asInstanceOf[String]
来欺骗编译器。我对此并不高兴,因为一旦我被告知我永远不应该使用asInstanceOf
。那我的原始代码有什么问题?
答案 0 :(得分:1)
请注意,您不应使用Array
- 使用Seq
。
Option[Seq[String]]
无需使用Seq[String]
。而不是None
,您可以始终使用空Seq
。
如果您仍想使用Option[Seq[String]]
,则应该像这样重写for
:
@for(jsArray <- customJS; js <- jsArray) {
<script src="@routes.Assets.at(js)"></script>
}
您不需要if !customJS.isEmpty
。 Option
类似于带有1或0个元素的集合。 Option[Array[String]]
的元素为Array[String]
。