你能问ruby把警告视为错误吗?
ruby是否允许您将警告视为错误?
我想这样做的一个原因是确保如果heckle删除一行代码意味着发出警告,我可以选择确保突变体被杀死。
很遗憾没有真正做到这一点的方法,至少在大多数版本的Ruby上没有( 可能存在变化), 缺少监视程序输出并在标准错误上出现警告时中止。 原因如下:
- Ruby定义了
Kernel.warn
,你可以重新定义你想做的任何事情(包括退出),并且你期望 (希望)Ruby一致地使用它来报告警告(包括内部例如解析警告), 但是 - Ruby内部本地实现的方法 (在C中)将直接从
source/server.c
直接调用一个名为rb_warn
的本机方法,完全绕过你对Kernel.warn
的重新定义 (例如,“string literal in condition
”警告,例如,当发出时执行类似:do_something if 'string'
rb_warn
do_something if 'string'
,通过source/parse.c
的本机rb_warn
打印) - 更糟糕的是,还有一个额外的
rb_warning
本机方法,如果指定了-w
或-v
,Ruby可以使用它来记录警告。
因此,如果您需要仅对应用程序代码调用Kernel.warn
生成的警告采取措施,则只需重新定义Kernel.warn
。 否则,您有两个选择 :
- alter
source/error.c
在rb_warn
和rb_warning
(和rb_warn_m
?)中退出,并重建Ruby - 监视程序的标准错误输出’
: warning:
‘,并在匹配时中止它
您也可能使用DTrace,并拦截对rb_warn
和rb_warning
的调用,尽管这不会产生可以从某个地方拯救的exception。 相反,它只是把它们放在一个你可以轻松记录它们的地方。