在Ruby 1.8中,retry
可以像:
for i in 0..4
puts i
retry if i == 4
end
但是在Ruby 1.9中,它会抛出一个错误:重试无效,Ruby 1.9中retry
的用法是什么?我在http://www.ruby-doc.org =(
retry
答案 0 :(得分:5)
用于重试失败的操作(当您捕获异常时)
n = 0
begin
puts 'Trying to do something'
raise 'oops'
rescue => ex
puts ex
n += 1
retry if n < 3
end
puts "Ok, I give up"
# >> Trying to do something
# >> oops
# >> Trying to do something
# >> oops
# >> Trying to do something
# >> oops
# >> Ok, I give up
答案 1 :(得分:1)
首先,我认为重试仅适用于开始结束块(或方法定义中的隐式开始结束块)。意思是它会跳回去开始。不是循环的开始。 此外,从1.9开始重试只适用于救援。
begin # should jump here
for i in 4..0
puts i
4 / i
end
rescue
retry
end
我认为你要找的是重做。
for i in 0..4
puts i
redo if i == 4
end
请注意重做将再次执行最后一次迭代。 结果是:
0
1
2
3
4
4 # => infinite loop
答案 2 :(得分:0)
Ruby 1.9仅支持retry
子句中的begin rescue
。
您可以使用延续来复制旧retry
require 'continuation'
def with_retry
loop { callcc { |cc| def cc.retry; call; end; yield cc; return }}
end
with_retry do |cc|
for n in 1..4
puts n
cc.retry if n == 4
end
end