2016-06-22 9 views
6

मैं इस उदाहरण में एक सरणी को संशोधित करना चाहता हूं (मैं इस उदाहरण में splice का उपयोग कर रहा हूं, लेकिन यह कोई भी ऑपरेशन हो सकता है जो सरणी को संशोधित करता है) और संशोधित सरणी - slice के विपरीत, जो सरणी से निकाले गए आइटम लौटाता है। मैं इसे इस रूप में, एक सरणी में एक ब्लॉक भंडारण के द्वारा आसानी से कर सकते हैं:मैं पर्ल 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 द्वारा प्रतिनिधित्व ब्लॉक इनलाइन करते हैं? स्पष्ट प्रतिस्थापन काम नहीं करता है:

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

कोई सुझाव?

उत्तर

8

दाएं स्थान पर एक & जोड़ें।

say (^6).map({ $_ < 4 ?? 0 !! $_ }).Array.&(-> $a { splice($a,1,3,[1,2,3]); $a }) 
# OUTPUT«[0 1 2 3 4 5]␤» 
संबंधित मुद्दे