Что означает двоеточие, подчеркивание и звезда в SiteMap лифта (записи:_*)?

Я одновременно изучаю Scala и lift, и я застрял в понимании синтаксиса, используемого для инициализации SiteMap в Boot.scala:

 val entries = Menu(Loc("Home", "/", "Home")) :: 
       Menu(Loc("Foo", "/badger", "Foo")) ::
       Menu(Loc("Directory Foo", "/something/foo", "Directory Foo")) :: Nil 
 LiftRules.setSiteMap(SiteMap(entries:_*))

Что именно означает значение параметра SiteMap? Я вижу, что значение записи представляет собой список меню. Что такое двоеточие, подчеркивание, звезда? Сначала я подумал, что это метод в списке, но я не могу найти такое определение...

1 ответ

Решение

Хорошо, после того, как мой коллега упомянул мне, что он столкнулся с этим секретным заклинанием в книге " Программирование в Scala", я провел поиск в своей копии и обнаружил, что она описана в разделе 8.8 "Повторные параметры". (Хотя вам нужно искать с пробелом между двоеточием и подчеркиванием:-/) Есть одно предложение, чтобы объяснить это как:

... добавить аргумент массива с двоеточием и _* символ, как это: scala> echo(arr: _*)

Эта нотация указывает компилятору передавать каждый элемент arr в качестве собственного аргумента echo а не все это как единый аргумент.

Я считаю, что приведенное здесь описание более полезно.

Так x: _* это как объявление типа, которое говорит компилятору обрабатывать x как повторяющийся параметр (он же список аргументов переменной длины - vararg).

Другие вопросы по тегам