Ruby では、ループに次のアイテムに移動するように指示するのは簡単です
(1..10).each do |a|
next if a.even?
puts a
end
結果=>
1
3
5
7
9
しかし、ループの外側から next を呼び出す必要がある場合 (例: メソッド)
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
私が見つけて動作する唯一の解決策は、SOの質問でthrow
& like を使用することですRubyで外側のサイクルを破るにはどうすればよいですか?catch
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
私の質問は次のとおりです。これを行うためのより優れたソリューションを誰かが持っていますか?? またはthrow/catch
これを行う唯一の方法ですか??
また、そのループの一部としてだけでなく呼び出したい場合my_complex_method
(=> :skip をスローしないでください)、何らかの方法でループから呼び出されていることをメソッドに伝えることができますか?