从 Scala 调用 Java vararg 方法时,:_* 会做什么?

2022-09-01 15:52:39

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

我正在使用REPL来调用带有Scala Array的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中的什么位置定义?:_*


答案 1

add告诉编译器将数组视为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:_*)

答案 2

推荐