繁体   English   中英

Scala Play类型推论的怪异情况

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM