2016-06-22 64 views
6

Desidero modificare un array (sto usando splice in questo esempio, ma potrebbe essere qualsiasi operazione che modifica l'array) e restituire l'array modificato, a differenza di slice, che restituisce gli elementi estratti dall'array. Posso farlo facilmente memorizzando un blocco in un array, come segue:Come concatenare a un blocco inline in Perl 6?

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] 

Come si Inline blocco rappresentato da $l in una singola espressione? La sostituzione ovvia non funziona:

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'? 

Qualche suggerimento?

risposta

8

Aggiungere una & al posto giusto.

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