2012-06-20 16 views
23

Powiel możliwe:
What does :_* (colon underscore star) do in Scala?Co robi: _ * podczas wywoływania metody vararg w Javie ze Scala?

Używam rEPL wywołać metodę vararg Java z tablicy Scala.

otrzymuję komunikat o błędzie, jeśli mogę to zrobić:

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

Ale jeśli mogę to robić to działa:

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

Moje pytania to co robi :_* zrobić? Gdzie jest zdefiniowany w interfejsie API Scala?

+0

Nie jestem pewien, czy to dokładnie duplikat. Zwróć uwagę, że wywołuje on metodę Java z powtarzającym się opisem parametru, a nie metodą powtarzalnych parowania Scala. – axel22

+2

Stack Overflow wykonuje kiepską pracę przy wyszukiwaniu symboli - w rzeczywistości całkowicie je ignoruje. Jeśli chcesz wyszukać symbole w przyszłości, użyj [Symbol Hound] (http://symbolhound.com/). Będzie wyszukiwać pytania dotyczące Stack Overflow, ale zachowaj symbole. –

Odpowiedz

28

dodanie :_* mówi kompilator traktować tablicy jako varargs. Działa to tak samo z Scala jak z Javą. Jeśli mam metoda

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

mogę nazwać jako takie:

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

ale jeśli chcę przekazać rzeczywistą sekwencję do niej (jak jesteś z getMethod) Chciałbym zrobić:

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*) 
Powiązane problemy