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