Scala 在可变函数中下划线星号?

标签 scala

这个问题在这里已经有了答案:





What does `:_*` (colon underscore star) do in Scala?

(4 个回答)


5年前关闭。




我目前正在关注 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.tailSeq[A]这里。

但是_*是什么意思?到底在这里做什么?

编辑::

正确的术语是 序列通配符

最佳答案

: _*表示法只是告诉 Scala 编译器将您传递给方法的集合的元素(在参数中处理 : _* 的集合)视为已将它们一一传递到 varargs 方法中。例如,如果你有

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

然后
foo(xs: _*)

就像你打字一样工作
foo(1, 2, 3, 4)

关于Scala 在可变函数中下划线星号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900434/

相关文章:

scala - 在Spark的RDD中更新值(value)的有效方法是什么?

scala - 在scala中 Play Framework 表单验证

scala - Play WS API : throttling request rates

scala - 如果有的话,没有实现的子特征中的 "abstract override"在哪里有用?

scala - Akka (2.3.0) 无法使用 java.lang.ClassNotFoundException 加载 Slf4jEventHandler 类

scala - 在 Scala 中使用现有的列表列表创建 Breeze DenseMatrix

scala - 通过HDFS返回的文件路径获取带有扩展名的文件名

java - 惯用 scala 中 jvm 选项的指南

scala - 如何编译Scala Hello World应用程序

scala - Apache Flink : ProcessWindowFunction implementation