Nó "splats" 1 chuỗi.
Nhìn vào chữ ký của nhà xây dựng
new Elem(prefix: String, label: String, attributes: MetaData, scope: NamespaceBinding,
child: Node*)
được gọi là
new Elem(prefix, label, attributes, scope,
child1, child2, ... childN)
nhưng ở đây chỉ có một chuỗi, không child1
, child2
v.v. vì vậy điều này cho phép chuỗi kết quả được sử dụng làm đầu vào cho hàm tạo.
Chúc mừng mã hóa.
1 Cái này không có tên dễ thương trong SLS, nhưng đây là chi tiết. Điều quan trọng cần có là nó thay đổi cách Scala liên kết các đối số với phương thức với các tham số lặp lại (như được biểu thị Node*
ở trên).
Các _*
loại chú thích được bao phủ trong "4.6.2 Các thông số lặp đi lặp lại" của SLS.
Tham số giá trị cuối cùng của một phần tham số có thể được xác định bởi bởi * *, ví dụ (..., x: T *). Kiểu của một tham số lặp lại như vậy bên trong phương thức sau đó là kiểu chuỗi scala.Seq [T]. Các phương thức có tham số lặp lại T * lấy số lượng đối số loại T. Nghĩa là, nếu một phương thức m có kiểu (p1: T1, .., Pn: Tn, ps: S *) U được áp dụng cho các đối số (e1, .., Ek) trong đó k> = n, thì m là lấy trong ứng dụng đó để có loại (p1: T1, .., pn: Tn, ps: S, .., ps0S) U, với các lần xuất hiện của loại S trong đó bất kỳ tên tham số nào ngoài ps đều mới.Ngoại lệ duy nhất cho quy tắc này là nếu đối số cuối cùng được đánh dấu là đối số chuỗi thông qua chú thích kiểu _ *. Nếu m ở trên được áp dụng cho các đối số (e1, .., En, e0: _ *), thì loại m trong ứng dụng đó được lấy là (p1: T1, .., Pn: Tn, ps: scala .Seq [S])