मैं किसी ब्लॉक से जल्दी कैसे लौट सकता हूं?


90

अगर मैं ऐसा कुछ करना चाहता था:

collection.each do |i|
   return nil if i == 3

   ..many lines of code here..
end

मुझे वह प्रभाव कैसे मिलेगा? मुझे पता है कि मैं बयान में ब्लॉक के अंदर सब कुछ लपेट सकता हूं, लेकिन यदि संभव हो तो मैं घोंसले से बचना चाहता हूं।

ब्रेक यहां काम नहीं करेगा, क्योंकि मैं शेष तत्वों की पुनरावृत्ति को रोकना नहीं चाहता।

जवाबों:


176

nextएक ब्लॉक के अंदर ब्लॉक से लौटता है। breakब्लॉक के अंदर आने वाले फंक्शन से ब्लॉक वापस आता है। इसके लिए eachइसका मतलब है कि breakलूप से बाहर निकलता है और लूप nextके अगले पुनरावृत्ति (जैसे नाम) से कूदता है। आप के साथ next valueऔर मान वापस कर सकते हैं break value


53
next valueऔर के लिए +1 break value। ठीक वही जो मेरे द्वारा खोजा जा रहा था।
जोशुआ पिंटर

1
break valueमेरे लिए काम नहीं किया, जबकि next valueठीक काम किया। बहुत बहुत धन्यवाद।
फ्रांसेस्को बेलाडोना

4
मुझे यकीन नहीं है कि आपकी अगली और ब्रेक की परिभाषा सही है। बहुत कम से कम, वे भ्रमित कर रहे हैं। ब्रेक अंतरतम लूप से बाहर निकलता है, अगला आपको अगले पुनरावृत्ति में ले जाता है। स्रोत: tutorialspoint.com/ruby/ruby_loops.htm
वाट्स इनबॉक्‍स

3
@WattsInABox nextऔर breakकिसी भी तरह से लूपिंग निर्माणों के लिए विशिष्ट नहीं हैं, इसलिए आपके द्वारा लिंक किया गया लेख बहुत भ्रामक है (क्योंकि यह बहुत विपरीत का अर्थ है)। और मेरे विवरण निश्चित रूप से सही होते हैं जब nextउन्हें breakब्लॉक के अंदर उपयोग किया जाता है (ध्यान दें whileऔर forशायद ही कभी, अगर रूबी में उपयोग किया जाता है, तो 99% उपयोग nextऔर breakब्लॉक के भीतर हैं)।
sepp2k

मुझे लगता है कि आपका मतलब गैर-लूपिंग ब्लॉक है। यही इसके बारे में भ्रमित है। इसके अलावा, मैं आपके 99% दावे से असहमत हूं, लेकिन यह एक अलग तर्क है।
वाट्स इनबॉक्‍स

11
#!/usr/bin/ruby

collection = [1, 2, 3, 4, 5 ]

stopped_at = collection.each do |i|
   break i if i == 3

   puts "Processed #{i}"
end

puts "Stopped at and did not process #{stopped_at}"

5

इस उदाहरण में, आप लूप को जल्दी समाप्त करने के लिए ब्रेक का उपयोग कर सकते हैं:

collection.each do |i|
  break if i == 3
  ...many lines
end

... बेशक, यह मान रहा है कि आप वास्तव में एक मूल्य वापस करने के लिए नहीं देख रहे हैं, बस ब्लॉक से बाहर निकलें।


यह सिर्फ ब्लॉक से नहीं लौटेगा, यह प्रत्येक से वापस आएगा। तो लूप समाप्त हो जाएगा, अगले मूल्य के साथ जारी नहीं रहेगा। यकीन नहीं है कि यही इरादा है।
sepp2k

4
आप breakरूबी के साथ एक मूल्य का उपयोग कर सकते हैं - वापस लौटने का break 5कारण होगा each5.
चक

1
धन्यवाद, लेकिन मैं इसे रोकना नहीं चाहता।
रियुगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.