से गहरे लाल रंग का पाश पर अगले यह पाश लगाना आसान है अगले आइटम पर जाने के लिएकॉल रूबी में बाहरी विधि
(1..10).each do |a|
next if a.even?
puts a
end
परिणाम =>
1
3
5
7
9
लेकिन क्या हुआ अगर मैं अगले बाहर से कॉल करने की आवश्यकता पाश की (जैसे: विधि)
def my_complex_method(item)
next if item.even? # this will obviously fail
end
(1..10).each do |a|
my_complex_method(a)
puts a
end
एकमात्र समाधान मैंने पाया और काम करता है throw
उपयोग करने के लिए हैcatch
की तरह में तो सवाल How to break outer cycle in Ruby?
def my_complex_method(item)
throw(:skip) if item.even?
end
(1..10).each do |a|
catch(:skip) do
my_complex_method(a)
puts a
end
end
मेरा प्रश्न है: किसी को भी किसी भी अधिक niftier समाधान यह करने के लिए मिल गया ?? या throw/catch
ऐसा करने का एकमात्र तरीका है ??
इसके अलावा यदि मैं my_complex_method
को केवल उस लूप (=> फेंक नहीं: छोड़ना) के हिस्से के रूप में कॉल करना चाहता हूं, तो क्या मैं किसी भी तरह से अपनी विधि को बता सकता हूं जिसे इसे लूप से बुलाया जाता है?
आप वास्तव में, * वास्तव में * सोचने पर हैं। एक मूल्य वापस करें और लौटे हुए मूल्य के आधार पर 'अगली' सशर्त रूप से आमंत्रित करें। सॉफ्टवेयर में यह एक * अविश्वसनीय रूप से * सामान्य पैटर्न है, जिसकी मैंने कभी भी उपयोग की है। 'फेंक'/'पकड़ 'के पास कोई जगह नहीं है। – meagar
मैं मानता हूं कि इस उदाहरण के लिए यह हास्यास्पद है, लेकिन मेरे पास एक ऐसा मामला है जहां मुझे लूप और विधि – equivalent8