Scala 2.13: передача явного значения массива в метод Scala varargs устарела.

Я перехожу на 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>

Вот как эта функция называется:

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

Поскольку я использую это во многих местах, есть ли способ решить эту проблему без изменения подписи?

Я пробовал разные вещи, например:

  • добавить toSeq: @toHtmlArgs(args.toSeq.toMap)
  • также при удалении @toHtmlArgs(args.toMap) появилось предупреждение.

person pme    schedule 23.09.2019    source источник
comment
Кажется, проблема не в toHtmlArgs, а в коде, вызывающем шаблон.   -  person Yuval Itzchakov    schedule 23.09.2019
comment
@YuvalItzchakov Я добавил к своему вопросу пример того, как я использую этот шаблон.   -  person pme    schedule 23.09.2019


Ответы (1)


Как было предложено, используйте scala.collection.immutable.ArraySeq.unsafeWrapArray : передайте это как args:

unsafeWrapArray(Array(Symbol("id") -> "assignForm", Symbol("class") -> "ui form")):_*
person Saurav Sahu    schedule 23.05.2021