2012-02-28 1 views

ответ

7

Под капотом String* передается как Seq[String]. Это всего лишь синтаксический сахар:

def blah(ss: String*) = {...} 
blah("Hi","there") 

превращается в

def blah(ss: Seq[String]) = {...} 
blah(Seq("Hi", "there")) 

и :_* просто означает «держать сахар, я уже получил то, что вам нужно - Seq!»

+0

т. Е. Это не метод Seq, просто еще один сахар - какой-то специальный оператор? :) – tuxSlayer

+1

@tuxSlayer - Правильно. ':' означает «имеет тип», как в 'val x: Int' (' x' имеет тип 'Int'). Поэтому '_ *' должен быть своего рода типом («Я знаю, что вы хотите varargs, но, смотрите здесь, у меня уже есть Seq!»). Хорошо, это не настоящий тип, но по крайней мере сахар синтаксически непротиворечивый. –

+0

Хорошо, спасибо. Только сегодня я потратил некоторое время на поиск этого метода в библиотеке :) Теперь его ясный :) – tuxSlayer