Ruby提供了两种以编程方式引发异常的可能性:raisefail,两者都是Kernel个方法.根据文件,它们是绝对等同的.

出于习惯,到目前为止我只使用了raise.现在我发现了几个建议(例如here),对于要捕获的异常使用raise,对于不打算处理的严重错误使用fail.

但这真的有意义吗?当你在编写一个类或模块,并导致一个深层次的问题时,你的编程同事们可能会很高兴地理解你的意图,但是using我的代码的人很可能不会看我的代码,也无法知道异常是由raise还是由fail引起的.因此,我谨慎地使用raisefail不会对他的决定产生任何影响,无论她是否应该处理它.

有人能看出我论点中的缺陷吗?或者还有其他标准,我可能想用fail而不是raise

推荐答案

对于要捕获的异常,使用"raise",对于不打算处理的严重错误,使用"fail"

这不是official style guide或你提供的链接所说的.

这里的意思是只在rescue个街区使用raise.当你想说某事是failing时使用fail,当rethrowing是例外时使用raise.

至于"does it matter"部分——这不是最严格遵守的规则之一,但你可以对任何公约提出同样的理由.你应该按照这个顺序:

  1. 你的项目风格指南
  2. 你的公司风格指南
  3. 社区风格指南

理想情况下,三者应该是相同的.


Update:从this PR年(2015年12月)起,公约将始终使用raise.

Ruby相关问答推荐

有没有办法保存 ruby​​ 代码的执行,以便稍后使用逐步重播对其进行调试?

根据部分已知值判断数组内容的简洁 Rubyist 方法是什么?

Procs的绑定

创建线程安全的临时文件名

独立于 Rails 使用 HAML 文件中的布局

Ruby vs Scala - 各自的优缺点

何时在 Ruby 方法中使用 `self.foo` 而不是 `foo`

如何在新行之间拆分字符串并保留空白行?

如何期望 RSpec should_receive 的一些(但不是全部)参数?

有效的Electron邮件地址正则表达式?

C# ?? Ruby 中的运算符?

Ruby代码美化,多行拆分长指令

如何在运行时判断 Ruby 中的 Gem 版本?

为什么整数除法在许多脚本语言中舍入?

在 Pry 中有相当于 next 的吗?

Ruby 中的抽象方法

Ruby - 在模块/类之间共享记录器实例

判断字符串是否为空的Ruby方法?

如何使用 link_to Ruby on rails 添加确认消息

将哈希传递给函数 ( *args ) 及其含义