解释varargs的Scala语法

解释varargs的Scala语法,scala,syntax,variadic-functions,Scala,Syntax,Variadic Functions,可能重复: 我编写了一个函数,该函数传递了一个格式字符串(对于string.format(…))和一个varargs参数数组(以及其他内容)。方法如下所示: def myMethod(foo: Number, formatStr: String, params: Any*): Unit = { // .. some stuff with foo println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*) } 我得到了para

可能重复:

我编写了一个函数,该函数传递了一个格式字符串(对于string.format(…))和一个varargs参数数组(以及其他内容)。方法如下所示:

def myMethod(foo: Number, formatStr: String, params: Any*): Unit = {
  // .. some stuff with foo
  println(formatStr, params.map(_.asInstanceOf[AnyRef]) : _*)
}

我得到了params参数的语法。它起作用了!但是怎么做呢?我不理解
println
的第二个参数的语法,尤其是结尾部分(
:*
)。它显然在调用
map
并将数组扩展为
AnyRef
s的序列。

结尾部分
:*
将集合转换为vararg参数


我知道,它看起来很奇怪。

一般来说,
符号用于类型归属,迫使编译器将值视为某个特定类型。这与铸造不同

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double
在本例中,您将特殊的varargs类型归为
\u*
。这反映了用于声明varargs参数的星号符号,可用于子类
Seq[T]
的任何类型的变量:

def myMethod(params: Any*) = ... //varargs parameter, use as an Array[Any]

val list = Seq("a", 42, 3.14) //a Seq[Any]
myMethod(list : _*)

@凯文:我同意。我投票结束了我的问题。