Как вызвать метод, принимающий String * с элементами Array [String] - PullRequest
4 голосов
/ 08 октября 2011

Предположим, у меня есть метод

def f(s:String *) = s.foreach( x => println(x) )

Теперь у меня есть массив:

val a = Array("1", "2", "3")

Как вызвать f с элементами a в качестве параметров?

EDIT:

Итак, учитывая a, я хочу сделать следующее:

f(a(0), a(1), a(2))  // f("1", "2", "3")

1 Ответ

15 голосов
/ 08 октября 2011

Для этого есть оператор:

f(a: _*)

Эта операция определена в главе 4.6.2. Повторяющиеся параметры из Спецификация языка Scala, версия 2.9 и более подробно объяснена в 6.6. Прикладные функции :

Последний аргумент в приложении может быть помечен как аргумент последовательности, например, e : _*. Такой аргумент должен соответствовать повторному параметру (§4.6.2) типа S * [...]. Кроме того, тип e должен соответствовать scala.Seq[T], для некоторого типа T, который соответствует S. В этом В этом случае список аргументов преобразуется путем замены последовательности e ее элементами.


Кстати, ваша f функция может быть упрощена:

def f(s:String *) = s foreach println

Или лучше (знак равенства не рекомендуется, так как предполагает, что метод на самом деле что-то возвращает, однако «только» возвращает Unit):

def f(s:String *) {s foreach println}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...