`retry`不会再次评估开始块

时间:2014-08-08 19:12:57

标签: ruby

我有一个代码:

i = 0
begin
  p "5 times"
rescue
  i += 1
  retry if i < 5
end

我认为使用此代码,开始块评估了5次,但文本只输出一次。

我做错了什么?

我正在使用ruby 2.1.2p95

2 个答案:

答案 0 :(得分:3)

如果出现错误,它将执行5次,但事实并非如此。

试试这个

i = 0
begin
  p "5 times"
  raise "error"
rescue
  i += 1
  retry if i < 5
end

如果您希望在没有例外的情况下执行代码,请使用ensure,但不能从那里retry

i = 0
begin
  p "5 times"
rescue
  # won't run if there are no exceptions
  i += 1
  retry if i < 5
ensure
  # always runs
end

答案 1 :(得分:2)

没有例外,因此&#34;救援&#34;块永远不会被调用。

请尝试使用此选项(请注意raise行):

i = 0
begin
  p "5 times"
  raise "...transfer control to the 'rescue' block..."
rescue
  i += 1
  retry if i < 5
end