How do I properly scope a Ruby lambda? -
मेरे पास यह लैम्ब्डा है:
echo_word = lambda do | शब्द | शब्दों को many_words = /\wss(.+)/ 2.times do sleep 1 match = many_words.match (शब्द) डालता है [1] यदि मैच की अंत नींद 1 एंड मैं इसे प्रत्येक को एक ब्लॉक के रूप में देना चाहता हूं, और भविष्य में कई और अधिक ब्लॉक करना चाहता हूं। def is_there_an_echo_in_here * args args.each और echo_word # फेंकता है नाम त्रुटि का अंत है_तोरे_आ_छोआ_इन_हाँ 'हैलो आउट आउट', 'मज़ेदार बार' लेकिन जब मैं my_funky_lambda.rb को इस लैम्ब्डा पद्धति से चलाता हूं, तो मुझे एक नेमअरेर मिलता है। मुझे यकीन नहीं है कि इस लैम्ब्डा के दायरे के साथ क्या हो रहा है, लेकिन मैं इसे is_there_an_echo_in_here से प्राप्त नहीं कर सकता। echo_word ठीक से है स्कैड और प्रयोग किया जाता है यदि मैं इसे निरंतर ECHO_WORD बना देता हूं और इसे इस तरह प्रयोग करता हूं, लेकिन एक अधिक सरल समाधान होना चाहिए। इस परिदृश्य में, एक्सेस करने का सबसे अच्छा तरीका क्या है echo_word अंदर से lamba is_there_an_echo_in_here , उदाहरण के लिए एक मॉड्यूल में इसे लपेटकर, वैश्विक दायरे तक पहुंचने, कुछ और?
रूबी में, नियमित तरीके नहीं हैं बंद। इस कारण से आप echo_word अंदर is_there_an_echo_in_here नहीं कॉल कर सकते हैं। ब्लॉक बंद हैं, हालांकि। रूबी 2 + में, आप यह कर सकते हैं:
define_method (: is_there_an_echo_in_here) ऐसा करें | * आर्ग्स | Args और echo_word एंड एक अन्य तरीका एक कोड के रूप में echo_word पास करना होगा: def is_there_an_echo_in_here * args , ब्लॉक args.each और amp; ब्लॉक एंड is_there_an_echo_in_ यहां 'हैलो आउट', 'मज़ेदार टाइम्स', इको_वर्ड
Comments
Post a Comment