2016-01-10 10 views
7

मैं map का उपयोग for लूप के अंदर करने की कोशिश कर रहा हूं, लेकिन यह कोड काम नहीं कर रहा है। इस कोड को 1 और 2 तीन बार मुद्रित करना चाहिए। लेकिन नीचे दिया गया कोड कोई आउटपुट नहीं बनाता है। यदि आप exit लाइन को असम्बद्ध करते हैं तो यह केवल आंशिक रूप से काम करेगा। कोई विचार क्यों? मैंने वर्तमान पर्ल 6 संस्करण (राकूदो संस्करण 2015.12-79-g4bb47d5 का उपयोग करके इसका परीक्षण किया है जो मोरवीएम संस्करण 2015.12 और विंडोज संस्करण पर भी बनाया गया है)।मैं पर्ल 6 में "फॉर" लूप के अंदर "मानचित्र" का उपयोग कैसे कर सकता हूं?

for (1..3) { 
map { say $_ }, (1..2); 
# exit; 
} 

उत्तर

8

के

say (map { say $_ }, 1..2).WHAT; 

पर एक नज़र यह हमें बताता है &map रिटर्न एक Seq है, जो एक आलसी निर्माण है लेते हैं।

इसके अतिरिक्त, एक for पाश के शरीर में पिछले बयान अपनी वापसी मान एकत्र करने के लिए प्रयोग किया जाता है, सीएफ

my @list = do for 1..3 { 
    map { say $_ }, 1..2; 
} 

say .WHAT for @list; 

आप &map करने के लिए कॉल के बाद एक और बयान जोड़ते हैं, तो कॉल 'सिंक में होगा संदर्भ 'और बेसब्री से मूल्यांकन किया जाता है। `का उपयोग कर के बजाय eager`` द्वारा

for 1..3 { 
    .say for 1..2; 
} 
+1

तुम भी एक उत्सुक अनुक्रम होने के लिए यह मजबूर कर सकते हैं:

यह भी स्पष्ट रूप से मजबूर हो सकते हैं:

for 1..3 { sink map { say $_ }, 1..2; } 

वैकल्पिक रूप से, सिर्फ एक और for पाश का उपयोग sink'। वास्तव में 'इसके लिए' केवल अपने सभी बयानों को 'सिंक' संदर्भ में रखना चाहिए यदि यह 'डू' ('1..3 {...}') से पहले नहीं है –

+5

यहां सबक लगता है: सावधान रहें एक फ़िल्टर फ़ंक्शन का उपयोग करके साइड इफेक्ट्स के लिए मानचित्र जैसे कि यह एक लूप है। –

संबंधित मुद्दे