redo和retry都是用来重新执行部分循环,但不同点在于:redo只是重新执行当前循环,而retry重新执行整个循环。
redo举例:
("a".."f").each do |i|
puts "Value: #{i}"
redo if i > "c"
end
结果显示,只有最后的迭代(d)被重复了:
Value: a
Value: b
Value: c
Value: d
Value: d
Value: d
... d一直循环。
retry举例:
("a".."f").each do |i|
puts "Value: #{i}"
retry if i > "c"
end
retry执行后,循环又从最先开始了:
Value: a
Value: b
Value: c
Value: d
Value: a
Value: b
Value: c
... 也是一直循环。