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

use*_*221 47 scala syntactic-sugar

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

val list = List(someCollection: _*)
Run Code Online (Sandbox Code Playgroud)

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

Kev*_*ght 70

通常,:表示法用于类型归属,强制编译器将值视为某种特定类型.这不是一样的铸件.

val b = 1 : Byte
val f = 1 : Float
val d = 1 : Double
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将归因于特殊的varargs类型.这反映了用于声明varargs参数的星号表示法,可用于子类的任何类型的变量Seq[T]:

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


dav*_*k01 17

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

  • Nitpick:参数只需要一个`Seq`,或者可以隐式转换为`Seq`. (7认同)