从 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
我想知道是否可以在 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