我目前正在遵循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.tail是Seq[A]在这里.
但这_*到底做了什么?
编辑::
正确的术语是序列通配符
该: _*符号只是告诉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)
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |