2009-07-14 46 views
56

我学习Scalalift在同一时间,我就死在理解用来inintialize在Boot.scala的SiteMap语法:电梯的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:_*)) 

到底是什么网站地图参数的含义? 我看到值条目是一个Menu的列表。什么是冒号,下划线,星号? 起初我以为它是在列表的方法,但我无法找到这样的定义...

+0

这实际上是一个很好的问题。我敢打赌,很多人都面临着同样的问题,正如你在你的问题中指出的那样,由于缺乏:“_”之间的空间而使得这个问题受到了重视。 – 2009-07-14 14:04:40

+0

非常好的问题。如果可以的话,我会多次赞扬它! – Ivan 2011-10-11 21:25:23

回答

72

OK,之后我的同事向我提到,他在书中Programming in Scala遇到这个秘密咒语,我做在我的副本中搜索并找到它描述的第8.8节重复参数。 (虽然你需要结肠和下划线之间有空间中搜索: - /)有一句话来解释它:

...有一个冒号和一个_*符号追加数组参数,像这样: scala> echo(arr: _*)

这个符号告诉编译器的arr每个元素通过作为自己的参数echo,而不是所有的它作为一个参数。

我觉得description offered here更有帮助。

所以x: _*类型声明,告诉编译器把x重复参数(又名可变长度参数列表 - 可变参数)。

相关问题