在Ruby 1.8,retry
可以使用像:Ruby 1.9上的`retry`的用法是什麼?
for i in 0..4
puts i
retry if i == 4
end
但是在Ruby 1.9,它拋出一個錯誤:無效重試,什麼是retry
在Ruby 1.9的使用?我找不到http://www.ruby-doc.org =(
在Ruby 1.8,retry
可以使用像:Ruby 1.9上的`retry`的用法是什麼?
for i in 0..4
puts i
retry if i == 4
end
但是在Ruby 1.9,它拋出一個錯誤:無效重試,什麼是retry
在Ruby 1.9的使用?我找不到http://www.ruby-doc.org =(
這是重試失敗的操作(當你發現一個異常)
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
我在哪裏可以找到官方的參考? =) – 2013-02-19 07:06:13
@WingLeong http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UM – oldergod 2013-02-19 07:13:36
謝謝,但本文檔並未顯示如何在救援中使用'retry'。 = S – 2013-02-19 07:17:01
首先,我認爲重試只會在開始結束塊工作(或隱含retry
開始的方法定義結束塊)。這意味着它會跳回到開始。一個循環的不是開始。 也爲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
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
行爲爲什麼不嘗試搜索'紅寶石+ retry'?谷歌提供了各種點擊,顯示了使用它的語法。 – 2013-02-19 07:35:00
可能的重複http://stackoverflow.com/questions/10063166/what-is-the-purpose-of-redo-and-retry-statements-in-ruby/10064392#10064392 – 2013-02-19 07:37:11