हमने retry
. के बारे में बात की है अपवादों के बाद पुन:प्रयास करने पर चर्चा करते समय कीवर्ड। इसका अल्पज्ञात समकक्ष redo
समान रूप से काम करता है, लेकिन पूरे ब्लॉक के बजाय लूप पुनरावृत्तियों को फिर से चलाता है।
redo
कीवर्ड
जैसा कि हमने पिछले अकादमी लेख में सीखा था, retry
आपको किसी ब्लॉक में कोड के एक टुकड़े को पुनः प्रयास करने देता है:
begin
puts "Iteration"
raise
rescue
retry
end
यह उदाहरण अपवाद उठाने से पहले कंसोल पर "Iteration" शब्द प्रिंट करता है। बचाव ब्लॉक निष्पादित होते हैं, जो retry
. कहते हैं और ब्लॉक को फिर से शुरू से शुरू करता है। इसका परिणाम हमारे कार्यक्रम में अंतहीन रूप से Iteration
प्रिंट करना है . redo
लूप का उपयोग करते समय कीवर्ड आपको समान प्रभाव प्राप्त करने देता है। यह उन स्थितियों में उपयोगी है जहां उदाहरण के लिए आपको पुनरावृति करते समय पुन:प्रयास करने की आवश्यकता होती है।
10.times do |i|
puts "Iteration #{i}"
redo if i > 2
end
यह प्रिंट होगा:
$ ruby redo.rb
Iteration 0
Iteration 1
Iteration 2
Iteration 3
Iteration 3
Iteration 3
...
ध्यान दें कि पुनरावृत्ति गणना समान कैसे रहती है? यह लूप की शुरुआत में निष्पादन को वापस ले जाएगा। कोड का यह प्रकार retry
. का उपयोग कर रहा है ठीक उसी आउटपुट को प्रिंट करेगा:
10.times do |i|
begin
puts "Iteration #{i}"
raise if i > 2
rescue
retry
end
end
आप redo
. का उपयोग कर सकते हैं एक लूप में पुनः प्रयास करने को लागू करने के लिए। अगले उदाहरण में हमारे पास नौकरियों की कतार है। वे या तो :success
. लौटाते हैं या :failure
. जब तक कार्य सफल नहीं हो जाता तब तक हम लूप के उसी पुनरावृत्ति को फिर से चलाते रहते हैं।
[job_1, job_2, job_3, job_4].each do |job|
redo unless job.call == :success
end
रूबी 1.8
retry
. का व्यवहार और redo
रूबी 1.8 और 1.9 के बीच बदल गया। वे लूप के पुनरावृत्ति को पुनरारंभ करते थे, लेकिन दोनों एक अलग तरीके से। 1.9 से, retry
केवल begin
. के साथ काम करता है /rescue
ब्लॉक करें और redo
केवल लूप में काम करता है।
next
कीवर्ड
यदि आप लूप के अगले पुनरावृत्ति पर जाना चाहते हैं, जैसा कि वर्तमान के प्रारंभ में वापस जाने के विपरीत है, तो आप next
का उपयोग कर सकते हैं ।
10.times do |i|
puts "Iteration #{i}"
next if i > 2
puts "Iteration done"
end
यह प्रिंट होगा:
$ ruby next.rb
Iteration 0
Iteration done
Iteration 1
Iteration done
Iteration 2
Iteration done
Iteration 3
Iteration 4
...
देखें कि पुनरावृत्ति काउंटर कैसे बढ़ता रहता है? ज्यादातर मामलों में next
. का उपयोग करना तुम क्या चाहते हो। देखें redo
यदि आपको एक लूप की आवश्यकता है जो सटीक संख्या में चलता है या किसी सरणी पर पुनरावृति करते समय त्रुटि प्रबंधन की आवश्यकता होती है।
हमें उम्मीद है कि आपने लूप में पुनरावृत्तियों को फिर से करने के बारे में कुछ नया सीखा है और यह जानना अच्छा लगेगा कि आपने इस लेख के बारे में क्या सोचा (या ऐपसिग्नल अकादमी श्रृंखला में से कोई भी)। कृपया हमें यह बताने में संकोच न करें कि आप क्या सोचते हैं, या यदि आपके पास कोई रूबी विषय है जिसके बारे में आप अधिक जानना चाहते हैं।