在Ruby中,很容易告诉循环转到下一个项目
(1..10).each do |a|
next if a.even?
puts a
end
Run Code Online (Sandbox Code Playgroud)
result =>
1
3
5
7
9
Run Code Online (Sandbox Code Playgroud)
但是如果我需要从循环外部调用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
Run Code Online (Sandbox Code Playgroud)
唯一的解决方案我找到并且工作是在SO问题中使用throw&catch喜欢如何在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
Run Code Online (Sandbox Code Playgroud)
我的问题是:任何人都有更多的琐事解决方案吗?或者throw/catch只是这样做的方法?
另外,如果我my_complex_method不仅要调用该循环的一部分(=>不抛出:跳过),我能以某种方式告诉我的方法它是从循环中调用的吗?
Mur*_*foX 12
你复杂的方法可以返回一个布尔值,然后你在你的循环上进行比较,如下所示:
def my_complex_method(item)
true if item.even?
end
(1..10).each do |a|
next if my_complex_method(a)
puts a
end
Run Code Online (Sandbox Code Playgroud)
一个简单的方法,但不同于try catch一个.
UPDATE
由于item.even?已经返回一个布尔值,您不需要该true if item.even?部分,您可以执行以下操作:
def my_complex_method(item)
item.even?
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2311 次 |
| 最近记录: |