Perl6 दृश्यों पर कोई "प्रत्येक" विधि क्यों नहीं?


14

कभी-कभी मैं पर्ल 6 REPL पर विधि कॉल की एक श्रृंखला लिखना शुरू करूंगा, जैसे:

".".IO.dir.grep(...).map(...).

... और तब मुझे महसूस होता है कि मैं अंतिम सूची के साथ जो करना चाहता हूं, वह हर तत्व की अपनी लाइन में है। मुझे उम्मीद है कि सीक्वेंस में एक eachविधि जैसा कुछ होगा ताकि मैं श्रृंखला को समाप्त कर सकूं .each(*.say), लेकिन इस तरह की कोई विधि नहीं है जो मुझे मिल सके। इसके बजाय मुझे लाइन की शुरुआत में लौटना होगा और आगे बढ़ना होगा .say for। ऐसा महसूस होता है कि यह मेरे विचारों के प्रवाह को तोड़ देता है।

यह एक मामूली झुंझलाहट है, लेकिन यह मुझे इस तरह के एक शानदार चूक के रूप में मारता है कि मुझे आश्चर्य होता है कि क्या मैं कुछ आसान विकल्प याद कर रहा हूं। केवल वही जिनके बारे में मैं सोच सकता हूं ».sayऔर .join("\n").say, लेकिन पूर्व आउट ऑर्डर के तत्वों पर काम कर सकता है (यदि मैं सही तरीके से समझता हूं) और बाद वाला एक एकल स्ट्रिंग का निर्माण करता है जो इनपुट सूची के आधार पर समस्याग्रस्त रूप से बड़ी हो सकती है।

जवाबों:


8

जैसा कि आपने टिप्पणी में लिखा है, बस एक अन्य .map(*.say)भी REPL का उपयोग करते समय ट्रू मान के साथ एक पंक्ति बनाता है। आप .sinkअंतिम मानचित्र विवरण के बाद कॉल करने की कोशिश कर सकते हैं ।

".".IO.dir.grep({$_.contains('e')}).map(*.uc).map(*.say).sink

मुझे लगता है ... लेकिन फिर REPL Trueइनपुट सूची के समान लंबाई के मूल्यों की एक सूची को थूक देगा । आदर्श नहीं।
सीन

".".IO.dir.grep(*.contains("e")).map(*.uc).map: {.say; Empty}वही करेंगे, लेकिन केवल REPL में एक खाली सूची का उल्लेख करते हैं
एलिजाबेथ मैटीजेन

मेरा मानना ​​है कि अगर उत्पादन किया गया है तो REPL लाइन के परिणाम का उत्पादन नहीं करने के लिए है; ऐसा लगता है कि tellकमांड से पहले और बाद में आउटहैंडल पर कॉल करके और उनकी तुलना में, मुझे लगता है? तो उस तर्क में कुछ गलत हो सकता है।
तैमोटिमो

11

आप अपना रोल कर सकते हैं।

use MONKEY;

augment class Any 
{ 
    method each( &block )
    {
        for self -> $value { 
            &block( $value );
        }
    }
};

List.^compose;
Seq.^compose;

(1, 2).each({ .say });
(2, 3).map(* + 1).each({ .say });

# 1
# 2
# 3
# 4

यदि आपको यह पसंद है, तो आपका पहला CPAN मॉड्यूल अवसर वहीं है।


1
CPAN मॉड्यूल के लिए शानदार उत्तर और विचार। आप उल्लेख पर विचार कर सकते हैं कि इसे एक नियमित उप में बनाया जा सकता है और बुलाया जा सकता है .&each(), अगर वे वृद्धि के साथ फुदकना नहीं चाहते हैं।
user0721090601

.&each()प्रारूप का उपयोग डाउनसाइड्स के साथ होता है, जैसे कि एक ही पंक्ति से चिपकना आवश्यक है (या \ पूरे स्थान पर उपयोग न करें )।
टाइयिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.