2012-06-20 9 views
23

Eventuali duplicati:
What does :_* (colon underscore star) do in Scala?Cosa fa: _ * fa quando chiama un metodo vararg Java da Scala?

sto usando il REPL di chiamare un metodo vararg Java con un Array Scala.

ottengo un errore se faccio questo:

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

Ma se faccio questo allora funziona:

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

Le mie domande è quello che fa :_* fare? Dove è definito nell'API Scala?

+0

Non sono sicuro se è esattamente un duplicato. Si noti che chiama un metodo Java con l'attribuzione ripetuta dei parametri, non un metodo Scala ripetuto-param. – axel22

+2

Stack Overflow fa un lavoro schifoso alla ricerca di simboli - infatti, li ignora completamente. Se hai bisogno di cercare simboli in futuro, usa [Symbol Hound] (http://symbolhound.com/). Cerca le domande su Stack Overflow ma conserva i simboli. –

risposta

28

aggiungendo :_* indica al compilatore di trattare l'array come vararg. Funziona allo stesso modo con Scala come con Java. Se ho un metodo

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

posso chiamare come tale:

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

ma se voglio passare una sequenza reale ad esso (come sei con getMethod) vorrei fare:

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