27

重複の可能性:(コロンアンダースコアスター)はScalaで何をしますか
:_*

私はREPLを使用して、Scala配列でJavavarargメソッドを呼び出しています。

これを行うとエラーが発生します:

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

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:_*)
于 2012-06-20T18:43:03.257 に答える