考虑这个开始抢救 – 确保块:
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
原文地址:https://www.jb51.cc/ruby/265827.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。