Что означают двоеточие, подчеркивание и звездочка в карте сайта lift (записи: _*)?
Вопрос
Я учусь Скала и поднимите в то же время, и я застрял на понимании синтаксиса, используемого для инициализации Карта сайта в багажнике.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?Я вижу, что ценность записи представляет собой список меню.Что такое двоеточие, подчеркивание, звездочка?Сначала я подумал, что это метод из Списка, но я не могу найти такое определение...
Решение
Хорошо, после того, как мой коллега упомянул мне, что он столкнулся с этим секретным заклинанием в Программирование на Scala книге, я поискал в своем экземпляре и нашел, что это описано в Раздел 8.8 Повторяющиеся параметры.(Хотя вам нужно выполнить поиск с пробелом между двоеточием и подчеркиванием :-/ ) Есть одно предложение, объясняющее это следующим образом:
...добавьте аргумент массива с двоеточием и
_*
символ, подобный этому:scala> echo(arr: _*)
Это обозначение указывает компилятору передавать каждый элемент
arr
в качестве своего собственного аргумента кecho
, а не все это как один аргумент.
Я нахожу, что описание, предлагаемое здесь более полезный.
Итак x: _*
является Нравится объявление типа , которое указывает компилятору обрабатывать x
как повторяющийся параметр (он же список аргументов переменной длины — варарг).