语法sugar:_ *用于将Seq作为方法参数处理

时间:2010-11-14 06:22:44

标签: scala syntactic-sugar

我刚在网上注意到这个构造:

val list = List(someCollection: _*)

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

3 个答案:

答案 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