Scala 变量函数中的下划线星号?

Scala 变量函数中的下划线星号?,scala,Scala,我现在正在跟踪 这是List[A] def apply[A](as: A*): List[A] = if (as.isEmpty) Nil else ::(as.head, apply(as.tail: _*)) 如果我在as.tail:\u*中省略了:\u*,scala会抱怨类型不匹配,这是有道理的,因为as.tail在这里是Seq[A] 但是\u*在这里到底做了什么 编辑:: 正确的术语是序列通配符,:\u*表示法只是告诉scala编译器将传递到方法中的集合元素(在参数中继续进行

我现在正在跟踪

这是
List[A]

def apply[A](as: A*): List[A] = 
  if (as.isEmpty) Nil
  else ::(as.head, apply(as.tail: _*))
如果我在
as.tail:\u*
中省略了
:\u*
,scala会抱怨类型不匹配,这是有道理的,因为
as.tail
在这里是
Seq[A]

但是
\u*
在这里到底做了什么

编辑::


正确的术语是序列通配符

:\u*
表示法只是告诉scala编译器将传递到方法中的集合元素(在参数中继续进行的集合):\u*)视为一个接一个地传递到varargs方法中。例如,如果你有

def foo(x: Int*) = x.sum
val xs = Seq(1, 2, 3, 4)
然后

就像你打字一样

foo(1, 2, 3, 4)

有趣。因此,我认为
.*
是一个特殊的构造,而不是另一个我无法理解的复杂下划线规则,对吗?我还没有遇到另一个例子,其中下划线用于注释类型(除了存在类型)。感谢“序列参数”对应于“模式序列”中的“序列通配符”,这是Scala中的另一个隐藏特性。非常感谢。
foo(1, 2, 3, 4)