27

可能重复:(冒号下划线星号)在 Scala 中做了什么
:_*

我正在使用 REPL 调用带有 Scala 数组的 Java vararg 方法。

如果我这样做,我会得到一个错误:

case class Person(name: String, age: Int)
val array = Array(classOf[String], classOf[Int])
Person.getClass.getMethod("apply", array)

但是,如果我这样做,那么它会起作用:

Person.getClass.getMethod("apply", array:_*)

我的问题是:_*做什么?它在 Scala API 中定义在哪里?

4

1 回答 1

37

添加:_*告诉编译器将数组视为可变参数。它在 Scala 和 Java 中的工作方式相同。如果我有方法

def foo(args: Int*) = args.map{_ + 1}

我可以这样称呼它:

foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5)

但是如果我想将一个实际的序列传递给它(就像你一样getMethod),我会这样做:

val mylist = List(1, 2, 3, 4)
foo(mylist:_*)
于 2012-06-20T18:43:03.257 回答