如何将 Scala 数组传递给 Scala vararg 方法?

How to pass Scala array into Scala vararg method?

考虑以下代码:

private def test(some:String*){

}

private def call () {
  val some = Array("asd", "zxc")
  test(some)
}

它打印 expect String, found Array[String] 为什么? Scala 可变参数不是数组吗?

备注

我在 Stack Overflow 上发现了几个关于 Scala 可变参数的问题,但它们都是关于调用 Java 可变参数方法或关于将 Scala 列表转换为数组的。

像这样将:_*附加到test中的参数

test(some:_*)

它应该会如您所愿地工作。

如果您想知道神奇的 :_* 有什么作用,请参阅 this question

很简单:

def test(some:String*){}

def call () {
  val some = Array("asd", "zxc")
  test(some: _*)
}

启动 Scala 2.13.0,如果您使用 some: _*,您将收到此 警告:

Passing an explicit array value to a Scala varargs method is deprecated (since 2.13.0) and will result in a defensive copy; Use the more efficient non-copying ArraySeq.unsafeWrapArray or an explicit toIndexedSeq call

按照建议,使用 scala.collection.immutable.ArraySeq.unsafeWrapArray:

unsafeWrapArray(some):_*

此外,您应该收到的另一个警告是这个

procedure syntax is deprecated: instead, add : Unit = to explicitly declare test's return type

要解决这个问题,请在函数的左括号之前添加 =

def test(some:String*) = {