我有一个代码:
i = 0
begin
p "5 times"
rescue
i += 1
retry if i < 5
end
我认为使用此代码,开始块评估了5次,但文本只输出一次。
我做错了什么?
我正在使用ruby 2.1.2p95
。
答案 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)
请尝试使用此选项(请注意raise
行):
i = 0
begin
p "5 times"
raise "...transfer control to the 'rescue' block..."
rescue
i += 1
retry if i < 5
end