在
Ruby中,很容易告诉循环去下一个项目
(1..10).each do |a| next if a.even? puts a end
result =>
1 3 5 7 9
但是如果我需要从循环外调用next(例如:method)
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&抓住像在这个问题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
我的问题是:任何人有更多的解决方案呢?或者是扔/捕捉只有这样做吗?
另外如果我想调用my_complex_method不仅是循环的一部分(=>不要抛出:skip),我可以以某种方式告诉我的方法它从一个循环调用?