Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

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

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