मैं सिर्फ रूबी में लूप के लिए एक विशिष्ट बिंदु बनाना चाहता हूं। यह अन्य भाषाओं के समान एक निर्माण की तरह लग सकता है, लेकिन वास्तव में यह रूबी में हर दूसरे लूपिंग निर्माण की तरह एक अभिव्यक्ति है। वास्तव में, प्रत्येक पुनरावृत्त के रूप में असंख्य वस्तुओं के साथ काम करता है।
के लिए पारित संग्रह किसी भी वस्तु हो सकता है जिसमें प्रत्येक पुनरावृत्ति विधि हो। ऐरे और हैश प्रत्येक विधि को परिभाषित करते हैं, और कई अन्य रूबी ऑब्जेक्ट भी करते हैं। के लिए / लूप निर्दिष्ट ऑब्जेक्ट के प्रत्येक विधि को कॉल करता है। चूंकि यह इटैलर मान देता है, इसलिए लूप निर्दिष्ट चर (या चर) के लिए प्रत्येक मान (या मूल्यों के प्रत्येक सेट) को असाइन करता है और फिर शरीर में कोड निष्पादित करता है।
यह एक मूर्खतापूर्ण उदाहरण है, लेकिन इस बिंदु को दर्शाता है कि लूप के लिए किसी भी ऑब्जेक्ट के साथ काम करता है जिसमें प्रत्येक विधि है, ठीक उसी तरह जैसे कि प्रत्येक पुनरावृत्ति कैसे करता है:
class Apple
TYPES = %w(red green yellow)
def each
yield TYPES.pop until TYPES.empty?
end
end
a = Apple.new
for i in a do
puts i
end
yellow
green
red
=> nil
और अब प्रत्येक पुनरावृति:
a = Apple.new
a.each do |i|
puts i
end
yellow
green
red
=> nil
जैसा कि आप देख सकते हैं, दोनों प्रत्येक विधि का जवाब दे रहे हैं जो मानों को ब्लॉक में वापस लाती है। जैसा कि यहां सभी ने कहा है, लूप के लिए प्रत्येक इटेरेटर का उपयोग करना निश्चित रूप से बेहतर है। मैं बस इस बिंदु पर घर चलाना चाहता था कि लूप में कुछ भी जादुई नहीं है। यह एक अभिव्यक्ति है जो एक संग्रह की प्रत्येक विधि को आमंत्रित करता है और फिर इसे अपने कोड के ब्लॉक में भेजता है। इसलिए, यह एक बहुत ही दुर्लभ मामला है जिसके लिए आपको उपयोग करने की आवश्यकता होगी। प्रत्येक itter का उपयोग लगभग हमेशा (ब्लॉक स्कोप के अतिरिक्त लाभ के साथ) करें।