200 200 200 200 200 -40 200 200 -40 200 200 -40 200 200 200:

考虑这个开始抢救 – 确保块:
attempts=0
begin
  make_service_call()
rescue Exception
  retry unless attempts>2
  exit -1
ensure
  attemps += 1
end

如果您运行该代码,它会引发异常,因为没有名为’make_service_call()’的函数.所以,它重试.但是它将被困在无限循环中,因为控制不会因为“重试”而“保证”.不应该’确保’部分的块确保其中的代码被执行无论在“开始”或“救援”发生什么?

当然,我可以在“开始”中增加计数 – 这不是重点.我只是提出一个关于“确定”的问题来澄清.

解决方法

确保部分在离开begin语句(以任何方式)执行时,但是当您重试时,您只是在语句内移动,以便确保部分不会被执行.

尝试此版本的示例来更好地了解发生了什么:

attempts = 0
begin
  make_service_call()
rescue Exception
  attempts += 1
  retry unless attempts > 2
  exit -1
ensure
  puts "ensure! #{attempts}"
end

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...