Что означает двоеточие, подчеркивание и звезда в SiteMap лифта? - PullRequest
59 голосов
/ 14 июля 2009

Я учу 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? Я вижу, что значение records является списком Menu. Что такое двоеточие , подчеркивание, звезда ? Сначала я думал, что это метод в списке, но я не могу найти такое определение ...

1 Ответ

76 голосов
/ 14 июля 2009

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

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

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

Я нахожу описание, предлагаемое здесь более полезным.

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

...