Dies ist das erwartete Verhalten in der The single argument rule beschrieben.
Perl 6 hat eine Reihe von Modellen durchlaufen, die sich auf die Abflachung während seiner Entwicklung beziehen, bevor sie sich auf eine einfache, als "Einzelargument-Regel" bekannte Weise festlegen.
Die Einzelargument-Regel wird am besten verstanden, wenn man die Anzahl der Iterationen berücksichtigt, die eine for-Schleife benötigt. Die zu iterierende Sache wird immer als ein einziges Argument für die for-Schleife behandelt, also der Name der Regel.
for 1, 2, 3 { } # List of 3 things; 3 iterations
for (1, 2, 3) { } # List of 3 things; 3 iterations
for [1, 2, 3] { } # Array of 3 things (put in Scalars); 3 iterations
for @a, @b { } # List of 2 things; 2 iterations
for (@a,) { } # List of 1 thing; 1 iteration
for (@a) { } # List of @a.elems things; @a.elems iterations
for @a { } # List of @a.elems things; @a.elems iterations
... die Liste Konstruktor (die Infix: <, Operator>) und dem Array Komponist (die [...] Zirkumfix) folgen der Regel:
[1, 2, 3] # Array of 3 elements
[@a, @b] # Array of 2 elements
[@a, 1..10] # Array of 2 elements
[@a] # Array with the elements of @a copied into it
[1..10] # Array with 10 elements
[[email protected]] # Array with 1 element (@a)
[@a,] # Array with 1 element (@a)
[[1]] # Same as [1]
[[1],] # Array with a single element that is [1]
[$[1]] # Array with a single element that is [1]
Die einzige von denen, die wahrscheinlich eine Überraschung bieten wird, ist [[1]], aber es wird als ausreichend selten angesehen, dass es keine Ausnahme von der sehr allgemeinen Einzelargument-Regel garantiert.
Also diese Arbeit machen ich schreiben kann:
my @d = ([ 1 .. 3 ],);
@d.push([ 4 .. 6 ]);
@d.push([ 7 .. 9 ]);
oder auch
my @d = ($[ 1 .. 3 ]);
@d.push([ 4 .. 6 ]);
@d.push([ 7 .. 9 ]);
'push' fügt eine Sache bis zum Ende der Liste, verwenden Sie' append' wenn Sie möchten, um mehr als ein Element gleichzeitig zu übergeben. –