当我在“救援”中“重试”时,Ruby 没有“确保”

2023-11-21

考虑这个开始救援确保块:

attempts=0
begin
  make_service_call()
rescue Exception
  retry unless attempts>2
  exit -1
ensure
  attemps += 1
end

如果按原样运行该代码,它会引发异常,因为没有名为“make_service_call()”的函数。所以,它会重试。但它会陷入无限循环,因为控制永远不会因为“重试”而进入“确保”状态。难道块的“确保”部分不应该确保无论“开始”或“救援”中发生什么情况,其中的代码都会被执行吗?

当然,我可以增加“开始”中的计数 - 这不是重点。我只是问有关“确保”的问题以获得一些澄清。


The ensure离开时执行部分begin声明(以任何方式)但是当你retry,您只是在语句内移动,因此确保部分不会被执行。

尝试这个版本的示例以更好地了解发生的情况:

attempts = 0
begin
  make_service_call()
rescue Exception
  attempts += 1
  retry unless attempts > 2
  exit -1
ensure
  puts "ensure! #{attempts}"
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我在“救援”中“重试”时,Ruby 没有“确保” 的相关文章

随机推荐