考虑这个 begin-rescue-ensure 块:
attempts=0
begin
make_service_call()
rescue Exception
retry unless attempts>2
exit -1
ensure
attemps += 1
end
如果您按原样运行该代码,则会引发异常,因为没有名为“make_service_call()”的函数。所以,它重试。但它会陷入无限循环,因为控制永远不会因为“重试”而进入“确保”。无论“开始”或“救援”中发生什么,不应该“确保”块的一部分确保其中的代码被执行吗?
当然,我可以在“开始”中增加计数——这不是重点。我只是在问关于“确保”的问题,以便弄清楚。