你能问ruby把警告视为错误吗?

And*_*imm 15 ruby warnings heckle

ruby是否允许您将警告视为错误?

我想这样做的一个原因是确保如果heckle删除一行代码意味着发出警告,我可以选择确保突变体被杀死.

vla*_*adr 29

很遗憾没有真正做到这一点的方法,至少在大多数版本的Ruby上没有(可能存在变化),缺少监视程序输出并在标准错误上出现警告时中止.原因如下:

  • Ruby定义Kernel.warn,你可以重新定义你想做的任何事情(包括退出),并且你期望(希望)Ruby一致地使用它来报告警告(包括内部例如解析警告),但是
  • 本地实现的方法里面红宝石(C语言)又将直接调用称为本地方法rb_warnsource/server.c,完全绕过你的重新定义Kernel.warn(如" string literal in condition"警告,例如,发出做一些像时:do_something if 'string'通过本机打印rb_warnsource/parse.c)
  • 使事情更糟的是,有一个额外的,rb_warning本地方法,可以通过Ruby的使用,如果记录警告-w-v指定.

因此,如果您需要仅对应用程序代码调用生成的警告采取措施,Kernel.warn只需重新定义即可Kernel.warn.否则,您有两个选择:

  1. 改变source/error.c退出中rb_warnrb_warning(和rb_warn_m?),并重建红宝石
  2. 监视程序的标准错误输出' : warning:',并在匹配时中止它

  • 谢谢.一个权威的答案,如果我看到一个! (4认同)

Fra*_* Yu 12

你终于可以通过覆盖来做到这Warning.warn一点

module Warning
  def warn(msg)
    raise msg
  end
end
Run Code Online (Sandbox Code Playgroud)

这会将警告转变为异常。该解决方案至少从 2.4 分支开始有效。