我正在同时学习Scala和lift,并且我不得不理解用于初始化Boot.scala中SiteMap的语法:
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参数的含义究竟是什么? 我看到值 entries 是一个Menu列表。什么是冒号,下划线,明星? 起初我以为它是List上的一个方法,但我无法找到这样的定义...
答案 0 :(得分:76)
好吧,在我的同事向我提起之后,他在Programming in Scala书中遇到了这个秘密咒语,我在我的副本中进行了搜索,并在第8.8节重复参数中找到了 。 (虽然你需要在冒号和下划线之间用空格搜索: - /)有一句话可以解释为:
...使用冒号和
_*
符号附加数组参数,如下所示:scala> echo(arr: _*)
这种表示法告诉编译器将
arr
的每个元素作为它自己的参数传递给echo
,而不是将它们全部作为单个参数传递。
我发现description offered here更有帮助。
所以x: _*
喜欢一个类型声明,它告诉编译器将x
视为重复参数(又名变长参数列表 - 的 可变参数 强>)。