[英]Weird situation with Scala Play - type inference
@(css: Option[String])(content: Html)(customJS: Option[Array[String]])
@for(js <- customJS if !customJS.isEmpty) {
<script src="@routes.Assets.at(js)"></script>
}
我正在为这个小的理解而写,它将遍历并打印出uri字符串。 由于可能为无,也可能为字符串数组,因此我使用了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
,因为一旦被告知我永远不要使用asInstanceOf
。 那么我的原始代码怎么了?
请注意,您不应使用Array
-use Seq
。
在Option[Seq[String]]
不需要-使用Seq[String]
。 可以使用空的Seq
代替None
。
如果您仍然想使用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]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.