Scala在Variadic函数中用下划线标出星号?

Dan*_*hin 7 scala

我目前正在遵循Scala中的函数编程

这是applyin 的伪实现List[A]

def apply[A](as: A*): List[A] = 
  if (as.isEmpty) Nil
  else ::(as.head, apply(as.tail: _*))
Run Code Online (Sandbox Code Playgroud)

如果我忽略: _*as.tail: _*,斯卡拉抱怨的类型不匹配,这是有道理的,因为as.tailSeq[A]在这里.

但这_*到底做了什么?

编辑::

正确的术语是序列通配符

Jas*_*man 8

: _*符号只是告诉Scala编译器来治疗,你传入方法(其中进行了集合的集合中的元素: _*,就好像它们已经通过一个接一个进入可变参数方法的参数).例如,如果你有

def foo(x: Int*) = x.sum
val xs = Seq(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)

然后

foo(xs: _*)
Run Code Online (Sandbox Code Playgroud)

就像你打字一样工作

foo(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)