在 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),我可以以某种方式告诉我的方法它是从循环中调用的吗?