Что означает двоеточие, подчеркивание и звезда в 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).