语法糖:_ *用于将Seq作为方法参数

我只是注意到这个构造在Web上的某个地方:

val list = List(someCollection: _*) 

_*是什么意思? 这是一个方法调用的语法糖吗? 我的自定义类应该满足什么约束,以便它可以利用这个语法糖?

一般来说, :表示法用于types归属,强制编译器将某个值视为某种特定的types。 这和铸造不太一样。

 val b = 1 : Byte val f = 1 : Float val d = 1 : Double 

在这种情况下,您正在归因于特殊的可变参数types。 这反映了用于声明varargs参数的星号符号,并可用于Seq[T]子types的任何types的variables:

 def f(args: String*) = ... //varargs parameter, use as an Array[String] val list = List("a", "b", "c") f(list : _*) 

这是爆炸数组的scala语法。 一些函数需要一个可变数量的参数,并传入一个数组需要附加: _*到数组参数。

我是通灵,我预测你会在scala中看到很多通配符:

http://www.slideshare.net/normation/scala-dreaded