Что означает param: _* в Scala?

Будучи новичком в Scala (2.9.1), у меня есть List[Event] и я хотел бы скопировать его в Queue[Event], но следующий синтаксис выдает Queue[List[Event]] вместо этого:

val eventQueue = Queue(events)

По какой-то причине следующее работает:

val eventQueue = Queue(events : _*)

Но я хотел бы понять, что это делает и почему это работает? Я уже посмотрел сигнатуру функции Queue.apply:

def apply[A](elems: A*)

И я понимаю, почему первая попытка не работает, но в чем смысл второй? Что такое :, и _* в данном случае, и почему функция apply просто не принимает Iterable[A] ?

70
задан Micho 12 April 2017 в 06:14
поделиться