parametros - ¿Qué hace:_* al llamar a un método vararg de Java desde Scala?
vararg kotlin (1)
Posible duplicado:
¿Qué hace:_*
(estrella de subrayado de colon) en Scala?
Estoy usando el REPL para llamar a un método vararg de Java con una matriz Scala.
Me sale 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:_*)
Mis preguntas es qué hace :_*
hacer? ¿Dónde está definido en la API de Scala?
añadiendo :_*
le dice al compilador que trate la matriz como varargs. Funciona igual con Scala que con Java. Si tengo un metodo
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 pasarle una secuencia real (como lo está con getMethod
) haría:
val mylist = List(1, 2, 3, 4)
foo(mylist:_*)