它“ splats” 1序列。
看一下构造函数签名
new Elem(prefix: String, label: String, attributes: MetaData, scope: NamespaceBinding,
child: Node*)
被称为
new Elem(prefix, label, attributes, scope,
child1, child2, ... childN)
但是这里只有一个序列,而不是child1
,child2
等等,因此这允许将结果序列用作构造函数的输入。
快乐的编码。
1这在SLS中没有可爱的名字,但这是详细信息。重要的是要改变Scala将具有重复参数的参数绑定到方法的方式(如上所示Node*
)。
该_*
类型的注释是包括在SLS的“4.6.2重复参数”。
参数部分的最后一个值参数可以加上“ *”,例如(...,x:T *)。这样,方法内这种重复参数的类型就是序列类型scala.Seq [T]。重复参数T *的方法采用可变数量的类型T的参数。也就是说,如果将类型(p1:T1,...,pn:Tn,ps:S *)U的方法m应用于其中k> = n的参数(e1,...,ek),则m为在该应用程序中具有类型(p1:T1,...,pn:Tn,ps:S,...,ps0S)U,其中k个出现类型S,其中ps以外的任何参数名称都是新鲜的。该规则的唯一例外是,如果最后一个参数通过_ *类型注释标记为序列参数。如果上面的m应用于自变量(e1,...,en,e0:_ *),则该应用程序中的m的类型为(p1:T1,...,pn:Tn,ps:scala .Seq [S])