2012-06-20 18 views
23

Duplicar posible:
What does :_* (colon underscore star) do in Scala?¿Qué hace: _ * al llamar a un método Vararg de Java desde Scala?

estoy usando el REPL llamar a un método vararg Java con una matriz de Scala.

me da un error si hago esto:

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

Pero si hago esto, entonces funciona:

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

Mi pregunta es ¿qué hacer :_*? ¿Dónde está definido en la API de Scala?

+0

No estoy seguro si es exactamente un duplicado. Tenga en cuenta que llama a un método de Java con la atribución de parámetros repetidos, no un método Scala repeat-params. – axel22

+2

Stack Overflow hace un trabajo pésimo al buscar símbolos; de hecho, los ignora por completo. Si necesita buscar símbolos en el futuro, use [Symbol Hound] (http://symbolhound.com/). Buscará preguntas en Stack Overflow pero mantendrá los símbolos. –

Respuesta

28

sumando :_* le dice al compilador que trate la matriz como varargs. Funciona igual con Scala que con Java. Si tengo un método

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

puedo llamarlo como tal:

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

pero si quiero pasar una secuencia real a ella (como lo es con getMethod) Me gustaría hacer:

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*) 
Cuestiones relacionadas