2013-02-19 22 views
1

在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 =(

+0

行爲爲什麼不嘗試搜索'紅寶石+ retry'?谷歌提供了各種點擊,顯示了使用它的語法。 – 2013-02-19 07:35:00

+0

可能的重複http://stackoverflow.com/questions/10063166/what-is-the-purpose-of-redo-and-retry-statements-in-ruby/10064392#10064392 – 2013-02-19 07:37:11

回答

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 
+0

我在哪裏可以找到官方的參考? =) – 2013-02-19 07:06:13

+0

@WingLeong http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html#UM – oldergod 2013-02-19 07:13:36

+1

謝謝,但本文檔並未顯示如何在救援中使用'retry'。 = S – 2013-02-19 07:17:01

1

首先,我認爲重試只會在開始結束塊工作(或隱含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 
0

Ruby 1.9的支持retrybegin 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 
相關問題