我想知道是否可以使用Proc
来跳过Ruby中的迭代?
我写了一些代码
def validation i
pr = Proc.new do |i|
if i < 3
next
end
end
pr.call(i)
end
(1..5).each do |i|
validation i
puts "#{i} is bigger than 3"
end
我期待这样的结果:
3 is bigger than 3
4 is bigger than 3
5 is bigger than 3
但我得到了:
1 is bigger than 3
2 is bigger than 3
3 is bigger than 3
4 is bigger than 3
5 is bigger than 3
那么可以在next
中以某种方式使用Proc
来跳过外部迭代或者还有其他方法吗?
答案 0 :(得分:1)
您无法在next
方法中调用validation
,因为循环是外部的。你可以做的是在next
循环中使用(1..5).each
,这取决于对validation
的调用。以下代码生成您想要的结果。
修改 - 代码已经过重构,可以正确使用Proc
。
pr = Proc.new {|i| i < 3}
(1..5).each do |i|
next if pr.call(i)
puts "#{i} is bigger than 3"
end