当我在“救援”中“重试”时,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 没有“确保” 的相关文章

  • mail_form gem 与 sidekiq 工作者

    怎么做邮件表格gem 与 sidekiq 工作人员一起工作吗 https github com plataformatec mail form https github com plataformatec mail form 我可能做错了什
  • 核心中的 find_by() 和 FinderMethods 中的 find_by() 有什么区别?

    目前我正在开发一个 gem 它会覆盖 ActiveRecordswhere 通过研究 我偶然发现了两种不同的find by实施 一个是在core https github com rails rails blob 5 0 stable ac
  • Rails 中的代码片段应该放在哪里?

    我有这个代码片段 可以为 POST 生成签名 它的细节并不重要 但我想知道的是 由于它不是与模型相关的代码块 所以它确实可以在任何地方使用 在控制器中 在模型中 在视图助手中 即使在视图中 因此 我不确定在哪里 甚至更大的问题是 一旦将其放
  • 在 Ruby 中将多个代码块作为参数传递

    我有一个需要代码块的方法 def opportunity opportunities 1 if yield performances 1 end end 我这样称呼它 opportunity some array empty 但是我如何传递
  • Watir 不会下载 PDF,只能在查看器中打开

    我试图用 Selenium 进行测试 但无法下载 pdf pdf 一直打开 参见我的另一篇文章 RUBY Selenium Webdriver 设置为下载 pdf 文件而不是打开它们 https stackoverflow com ques
  • Capybara::ElementNotFound:无法找到字段“标题”

    我无法解决这个问题 请帮我 它给了我找不到元素的错误 规格 功能 todos create spec rb require spec helper describe Creating todos do let user FactoryGir
  • 在 Ruby Net::HTTP.start 中为服务调用设置 read_timeout

    我想在我的 ruby 代码中覆盖服务调用的默认超时 我打开连接如下 res Net HTTP start task url host task url port do http http get tasks task id end 我尝试将
  • Rails has_many 通过带有附加属性的表单

    我正在尝试创建一个表单 允许用户向活动添加 编辑 删除位置 我目前找到的所有例子要么是HABTM表单 不允许编辑存在于表单中的附加属性 has many through配置 或仅列出现有关系 下面的图片显示了我想要完成的任务 该列表将显示每
  • 正则表达式检查 ruby​​ 中的字母数字字符串

    我正在尝试验证 ruby 中的字符串 任何包含空格 下划线或任何特殊字符的字符串都将无法通过验证 有效字符串应仅包含字符 a zA Z0 9 我的代码看起来像 def validate string regex a zA Z0 9 if s
  • 字符串被两个不同的分隔符分割

    我有这样的字符串 some dasd dasd dasdas dasdas dasd das dsad 我需要用两个不同的符号将字符串拆分为数组 and 所以我想得到数组 some dasd dasd dasdas dasdas dasd
  • 有没有办法编写一个匹配除文件夹中的文件之外的所有文件的全局模式?

    我需要编写一个文件 glob 它将匹配除特定文件夹中包含的文件之外的所有文件 例如 除了高级文件夹中包含的文件之外的所有文件 foo 我已经到达以下区域 foo 然而 这个 glob 似乎与 Ruby 中的任何文件都不匹配File fnma
  • Ruby 中实现的所有设计模式的备忘单?

    我想知道是否有针对 Ruby 中实现的所有设计模式的备忘单 这样您就不必重新发明轮子 设计模式对于组织大量代码非常有用 因为您不需要像在 verbose algol derivitive language 中那样编写那么多代码来在 ruby
  • 带有可选第一个哈希参数和keyword_args的奇怪方法行为

    我有以下方法 def test first param nil keyword arg nil puts first param first param puts keyword arg keyword arg end 以下所有调用都按照我
  • Accepts_nested_attributes_for Rails 3 中的实际形式使用

    使用 Ruby on Rails 3 我半明白accepts nested attributes for是如何的supposed工作 但我无法找出以某种形式实现这一点的实用方法 例如 如果有人想在其用户页面中添加他们最近的位置 user r
  • 为 .API 文件启用自动完成功能?

    有谁知道如何使用 N 站点上提供的 API 文件在 Notepad 中自动完成工作 在 API 文件夹中具有 XML 自动完成文件的语言中 自动完成功能工作得很好 但对于使用 API 文件的语言 ruby AutoIt 等 完全不起作用 根
  • Ruby On Rails 与 Windows Vista - 最佳设置? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您认为 Win Vista 环境中 RoR 的最佳设置是什么 我尝试过 radrails eclipse 插件 它对我来说似乎太庞大了 我也开始
  • 如何在 Rails 3 中连接表并计算记录数?

    我有一个Collection有很多硬币的类 我正在尝试选择拥有两枚以上硬币的收藏品 目前 我可以直接通过 Ruby 来完成此操作 但效率极低 我当前的代码 collections Collection all select c c coin
  • 如何将 STDOUT 捕获到字符串?

    puts hi puts bye 我想存储到目前为止代码的 STDOUT 在本例中 hi nbye 到变量中说 结果 并打印它 puts result 我这样做的原因是我已将 R 代码集成到我的 Ruby 代码中 当 R 代码运行时 其输出
  • 不将所需的文件包含到 vim 全方位补全中

    如果我尝试在具有 require xxx 语句的 Ruby 文件中自动完成 它会开始扫描所需的所有文件 以及所需文件所需的文件 它每次都会这样做 是否可以使 vim 自动完成功能不扫描所需文件或仅扫描特定路径中的文件 例如仅 app 以下之
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint

随机推荐