60

我正在同时学习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 参数的具体含义是什么?我看到值条目是菜单列表。什么是冒号、下划线、星号?起初我以为这是 List 上的一个方法,但我找不到这样的定义......

4

1 回答 1

78

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

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

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

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

x: _*就像一个类型声明,告诉编译器将x视为重复参数(又名可变长度参数列表 - vararg)。

于 2009-07-14T08:31:08.937 回答