从 Proc 跳过迭代

Skipping iteration from Proc

我想知道是否可以在 Ruby 中使用 Proc 来跳过迭代?

我写了一段代码

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

那么是否可以在 Proc 中以某种方式使用 next 来跳过外部迭代或者有其他方法?

您不能在 validation 方法中调用 next,因为循环是外部的。您可以做的是在依赖于对 validation 的调用的 (1..5).each 循环中使用 next。以下代码产生您想要的结果。

Edit - 代码已重构以适当使用 Proc

pr = Proc.new {|i| i < 3}

(1..5).each do |i|
  next if pr.call(i)
  puts "#{i} is bigger than 3"
end