Il "splats" 1 la séquence.
Regardez la signature du constructeur
new Elem(prefix: String, label: String, attributes: MetaData, scope: NamespaceBinding,
child: Node*)
qui est appelé comme
new Elem(prefix, label, attributes, scope,
child1, child2, ... childN)
mais ici il n'y a qu'une séquence, non child1
, child2
etc. donc cela permet à la séquence de résultat à utiliser comme entrée au constructeur.
Bon codage.
1 Cela n'a pas de nom mignon dans le SLS, mais voici les détails. La chose importante à obtenir est que cela change la façon dont Scala lie les arguments à la méthode avec des paramètres répétés (comme indiqué Node*
ci-dessus).
L' _*
annotation de type est traitée dans "4.6.2 Paramètres répétés" du SLS.
Le dernier paramètre de valeur d'une section de paramètres peut être suffixé par «*», par exemple (..., x: T *). Le type d'un tel paramètre répété à l'intérieur de la méthode est alors le type de séquence scala.Seq [T]. Les méthodes avec des paramètres répétés T * prennent un nombre variable d'arguments de type T. Autrement dit, si une méthode m de type (p1: T1,..., Pn: Tn, ps: S *) U est appliquée aux arguments (e1,..., Ek) où k> = n, alors m est pris dans cette application pour avoir le type (p1: T1,..., pn: Tn, ps: S,..., ps0S) U, avec k ¡n occurrences de type S où tout nom de paramètre au-delà de ps est frais.La seule exception à cette règle est si le dernier argument est marqué comme argument de séquence via une annotation de type _ *. Si m ci-dessus est appliqué aux arguments (e1,..., En, e0: _ *), alors le type de m dans cette application est considéré comme (p1: T1,..., Pn: Tn, ps: scala .Seq [S])