【问题标题】:Scala 2.13: Passing an explicit array value to a Scala varargs method is deprecatedScala 2.13:不推荐将显式数组值传递给 Scala 可变参数方法
【发布时间】:2019-09-23 08:43:57
【问题描述】:

我正在迁移到 Scala 2.13。

Play Twirl 模板中的args: (Symbol, String)* 给了我这个警告:

将显式数组值传递给 Scala varargs 方法已被弃用(自 2.13.0 起),并将导致防御性副本;使用更高效的非复制 ArraySeq.unsafeWrapArray 或显式 toIndexedSeq 调用

这是整个模板:

@(action: play.api.mvc.Call, args: (Symbol, String)*)(body: => Html)
<form  method="@action.method"
  @toHtmlArgs(args.toMap)>
  @body
</form>

下面是这个函数的调用方式:

@helper.formRelative(action = ..., Symbol("id") -> "assignForm", Symbol("class") -> "ui form") { ..body.. }

由于我在很多地方都使用它,有没有在不更改签名的情况下解决此问题的方法?

我尝试了不同的方法,例如:

  • 添加toSeq:@toHtmlArgs(args.toSeq.toMap)
  • 同时删除 @toHtmlArgs(args.toMap) 时会出现警告。

【问题讨论】:

  • 看来问题不在于toHtmlArgs,而在于调用模板的代码。
  • @YuvalItzchakov 我在我的问题中添加了一个关于如何使用此模板的示例。

标签: scala playframework twirl


【解决方案1】:

按照建议,使用 scala.collection.immutable.ArraySeq.unsafeWrapArray :将其传递为 args

unsafeWrapArray(Array(Symbol("id") -> "assignForm", Symbol("class") -> "ui form")):_*

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多