Scala 2.13:不推荐将显式数组值传递给 Scala varargs 方法

pme*_*pme 5 scala playframework twirl

我正在迁移到 Scala 2.13。

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

不推荐将显式数组值传递给 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>
Run Code Online (Sandbox Code Playgroud)

该函数的调用方式如下:

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

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

我尝试了不同的事情,例如:

  • 添加toSeq@toHtmlArgs(args.toSeq.toMap)
  • 还删除了@toHtmlArgs(args.toMap)出现的警告。

Sau*_*ahu 1

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

unsafeWrapArray(Array(Symbol("id") -> "assignForm", Symbol("class") -> "ui form")):_*
Run Code Online (Sandbox Code Playgroud)