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

Pal*_*ndo 59 scala lift

我正在学习Scala并同时解除,我不得不理解用于在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:_*))
Run Code Online (Sandbox Code Playgroud)

SiteMap参数的含义究竟是什么?我看到值条目是菜单列表.什么是冒号,下划线,明星?起初我以为它是列表中的一种方法,但我无法找到这样的定义......

Pal*_*ndo 77

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

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

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

我发现这里提供描述更有帮助.

所以x: _*一个类型声明,告诉编译器把x作为重复参数(又称可变长度参数列表- 可变参数).

  • 因此,如果您熟悉Python,则使用*var调用函数会执行类似的操作:`var =(1,2,3)def f(*args):对于arg中的arg:print arg f(*var)`那将打印:1 2 3所以显然`x:_*`是Scala相当于此. (4认同)