2016-06-22 14 views
6

Tôi muốn sửa đổi một mảng (Tôi đang sử dụng splice trong ví dụ này, nhưng có thể là bất kỳ thao tác nào sửa đổi mảng) và trả lại sửa đổi mảng - không giống như slice. Tôi có thể làm điều đó một cách dễ dàng bằng cách lưu trữ một khối trong một mảng như sau:Tôi làm cách nào để chuỗi thành một khối nội tuyến trong 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] 

Làm thế nào để nội tuyến các khối đại diện bởi $l thành một biểu thức duy nhất? Sự thay thế rõ ràng không hoạt động:

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

Mọi đề xuất?

Trả lời

8

Thêm một & vào đúng vị trí.

say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array.&(-> $a { splice($a,1,3,[1,2,3]); $a }) 
# OUTPUT«[0 1 2 3 4 5]␤» 
Các vấn đề liên quan