Подтвердить что ты не робот

Что делает: _ * при вызове метода Java vararg из Scala?

Возможный дубликат:
Что делает :_* (название подчеркивания двоеточия) в Scala?

Я использую REPL для вызова метода Java vararg с массивом Scala.

Я получаю сообщение об ошибке, если я это сделаю:

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

Но если я это сделаю, это будет работать:

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

Мои вопросы - это то, что делает :_*? Где он определен в API Scala?

4b9b3361

Ответ 1

Добавление :_* указывает компилятору обработать массив как varargs. Он работает так же с Scala, как и с Java. Если у меня есть метод

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

Я могу назвать это следующим:

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

но если я хочу передать ему действительную последовательность (как вы с getMethod), я бы сделал:

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