lift的SiteMap中的冒号,下划线和星号是什么意思(条目:_ *)?

时间:2009-07-14 08:06:19

标签: scala lift

我正在同时学习Scalalift,并且我不得不理解用于初始化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上的一个方法,但我无法找到这样的定义...

1 个答案:

答案 0 :(得分:76)

好吧,在我的同事向我提起之后,他在Programming in Scala书中遇到了这个秘密咒语,我在我的副本中进行了搜索,并在第8.8节重复参数中找到了 。 (虽然你需要在冒号和下划线之间用空格搜索: - /)有一句话可以解释为:

  

...使用冒号和 _* 符号附加数组参数,如下所示:   scala> echo(arr: _*)

     

这种表示法告诉编译器将arr的每个元素作为它自己的参数传递给echo,而不是将它们全部作为单个参数传递。

我发现description offered here更有帮助。

所以x: _* 喜欢一个类型声明,它告诉编译器将x视为重复参数(又名变长参数列表 - 的 可变参数 )。