我刚在网上注意到这个构造:
val list = List(someCollection: _*)
_*
是什么意思?这是一些方法调用的语法糖吗?我的自定义类应满足哪些约束才能利用这种语法糖?
答案 0 :(得分:69)
通常,:
表示法用于类型归属,强制编译器将值视为某种特定类型。这与完全相同与投射相同。
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 : _*)
答案 1 :(得分:17)
这是用于爆炸数组的scala语法。有些函数使用可变数量的参数并传入一个数组,您需要将: _*
附加到数组参数。
答案 2 :(得分:1)
变量(数量)使用*定义。 例如,
def wordcount(words: String*) = println(words.size)
wordcount需要一个字符串作为参数
scala> wordcount("I")
1
但是接受更多的字符串作为其输入参数(Type Ascription需要_ *)
scala> val wordList = List("I", "love", "Scala")
scala> wordcount(wordList: _*)
3