Что делает: _ * при вызове метода 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?
Ответы
Ответ 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:_*)