我正在使用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中的定义在哪里?
答案 0 :(得分:31)
添加:_*
告诉编译器将数组视为varargs。它与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:_*)