ruby是否允许您将警告视为错误?
我想这样做的一个原因是确保如果heckle删除一行代码意味着发出警告,我可以选择确保突变体被杀死.
很遗憾没有真正做到这一点的方法,至少在大多数版本的Ruby上没有(可能存在变化),缺少监视程序输出并在标准错误上出现警告时中止.原因如下:
Ruby定义Kernel.warn
,你可以重新定义你想做的任何事情(包括退出),并且你期望(希望)Ruby一致地使用它来报告警告(包括内部例如解析警告),但是
本地实现的方法里面红宝石(C语言)又将直接调用称为本地方法rb_warn
的source/server.c
,完全绕过你的重新定义Kernel.warn
(如" string literal in condition
"警告,例如,发出做一些像时:do_something if 'string'
通过本机打印rb_warn
的source/parse.c
)
使事情更糟的是,有一个额外的,rb_warning
本地方法,可以通过Ruby的使用,如果记录警告-w
或-v
指定.
因此,如果您需要仅对应用程序代码调用生成的警告采取措施,Kernel.warn
则只需重新定义即可Kernel.warn
.否则,您有两个选择:
改变source/error.c
退出中rb_warn
和rb_warning
(和rb_warn_m
?),并重建红宝石
监视程序的标准错误输出' : warning:
',并在匹配时中止它