我目前正在关注Functional Programming In Scala
这是apply
List[A]
的伪实现
def apply[A](as: A*): List[A] =
if (as.isEmpty) Nil
else ::(as.head, apply(as.tail: _*))
如果我在: _*
中省略as.tail: _*
,则scala会抱怨类型不匹配,这是有道理的,因为此处as.tail
为Seq[A]
。
但_*
到底做了什么?
编辑::
正确的术语是序列通配符
答案 0 :(得分:7)
: _*
表示法只是告诉scala编译器处理传递给方法的集合的元素(在参数中继续: _*
的集合),就像它们已经通过一个传递一样一进入varargs方法。例如,如果你有
def foo(x: Int*) = x.sum
val xs = Seq(1, 2, 3, 4)
然后
foo(xs: _*)
就像你输入了
一样foo(1, 2, 3, 4)