跳过Proc的迭代

时间:2015-04-14 22:08:22

标签: ruby iteration metaprogramming next proc

我想知道是否可以使用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来跳过外部迭代或者还有其他方法吗?

1 个答案:

答案 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