2016-06-22 22 views
6

Ich möchte ein Array ändern (ich verwende splice in diesem Beispiel, aber es könnte jeder Vorgang, der das Array ändert) und das modifizierte Array zurückgeben - im Gegensatz zu slice, die die Elemente aus dem Array zurückgegeben zurückgibt. Ich kann es leicht tun, indem ein Block in einem Array zu speichern, wie folgt:Wie kann ich in Perl 6 zu einem Inline-Block verketten?

my $l = -> $a { splice($a,1,3,[1,2,3]); $a }; 
say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array; 
# [0 0 0 0 4 5] 
say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array.$l; 
# [0 1 2 3 4 5] 

Wie Inline-I durch die $l in einen einzelnen Ausdruck dargestellt Block? Die offensichtliche Ersetzung funktioniert nicht:

say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array.(-> $a { splice($a,1,3,[1,2,3]); $a }) 
Invocant requires a type object of type Array, but an object instance was passed. Did you forget a 'multi'? 

Irgendwelche Vorschläge?

Antwort

8

Fügen Sie einen & an der richtigen Stelle hinzu.

say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array.&(-> $a { splice($a,1,3,[1,2,3]); $a }) 
# OUTPUT«[0 1 2 3 4 5]␤»