2012-06-20 3 views
23

可能性の重複:
What does :_* (colon underscore star) do in Scala?ScalaからJava varargメソッドを呼び出すときに_ _ *は何をしますか?

私は、Scalaの配列を使用してJava可変引数メソッドを呼び出すためにREPLを使用しています。

私はこれを行う場合、私はエラーを取得する:

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

正確に重複しているかどうかはわかりません。彼はScalaのrepeated-paramsメソッドではなく、反復されたパラメータのascriptionを持つJavaメソッドを呼び出すことに注意してください。 – axel22

+2

スタックオーバーフローは、シンボルを検索する際に厄介な仕事です。実際、完全に無視されます。将来、シンボルを検索する必要がある場合は、[Symbol Hound](http://symbolhound.com/)を使用してください。スタックオーバーフローに関する質問は検索されますが、シンボルは保持されます。 –

答えて

28

を追加すると、:_*は、配列をvarargsとして扱うようにコンパイラに指示します。 ScalaはJavaと同じように動作します。

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

が、私は(あなたが getMethodであるように)への実際の配列を渡したい場合、私はどうなる::私は方法

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

を持っている場合、私はそのように呼び出すことができます

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*) 
関連する問題