49

我刚刚在网络上的某个地方注意到了这个结构:

val list = List(someCollection: _*)

是什么_*意思?这是某些方法调用的语法糖吗?我的自定义类应该满足哪些约束才能利用这种语法糖?

4

3 回答 3

73

通常,该:符号用于类型归属,强制编译器将值视为某种特定类型。这与铸造不太一样。

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

在这种情况下,您将赋予特殊的varargs类型。这反映了用于声明 varargs 参数的星号符号,并且可以用于子类的任何类型的变量Seq[T]

def f(args: String*) = ... //varargs parameter, use as an Array[String]
val list = List("a", "b", "c")
f(list : _*)
于 2010-11-14T10:23:47.663 回答
18

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

于 2010-11-14T06:57:45.440 回答
1

变量(数量)参数使用 * 定义。例如,

def wordcount(words: String*) = println(words.size)

wordcount 需要一个字符串作为参数,

scala> wordcount("I")
1

但接受更多字符串作为其输入参数(类型 Ascription 需要 _*)

scala> val wordList = List("I", "love", "Scala")
scala> wordcount(wordList: _*)
3
于 2019-01-07T00:13:26.907 回答