您能让ruby将警告视为错误吗?
ruby允许您将警告视为错误吗您能让ruby将警告视为错误吗?,ruby,warnings,heckle,Ruby,Warnings,Heckle,ruby允许您将警告视为错误吗 我想这样做的一个原因是为了确保如果heckle删除一行代码意味着出现警告,我可以选择确保突变体被杀死。不幸的是,没有真正的方法做到这一点,至少在大多数版本的Ruby上没有(可能存在变体),没有监控程序输出并在标准错误上出现警告时中止程序输出。原因如下: Ruby定义,您可以重新定义它来做任何您想做的事情(包括退出),并且您希望Ruby一致地使用它来报告警告(包括内部警告,例如解析警告),但是 Ruby内部本机实现的方法(在C中)反过来将直接从source/ser
我想这样做的一个原因是为了确保如果heckle删除一行代码意味着出现警告,我可以选择确保突变体被杀死。不幸的是,没有真正的方法做到这一点,至少在大多数版本的Ruby上没有(可能存在变体),没有监控程序输出并在标准错误上出现警告时中止程序输出。原因如下:
- Ruby定义,您可以重新定义它来做任何您想做的事情(包括退出),并且您希望Ruby一致地使用它来报告警告(包括内部警告,例如解析警告),但是
- Ruby内部本机实现的方法(在C中)反过来将直接从
调用名为source/server.C
的本机方法,完全绕过您对rb\u warn
(例如,内核的重新定义。warn
)例如,在执行以下操作时发出的警告:条件中的字符串文本
,通过do\u something if'string'
中的本机source/parse.c
打印)rb\u warn
- 更糟糕的是,还有一个附加的,
原生方法,如果指定了rb_warning
或-w
,Ruby可以使用该方法记录警告-v
Kernel.warn
生成的警告执行操作,那么只需重新定义Kernel.warn
。否则,您只有两个选项:
source/error.c
退出rb\u warn
和rb\u warning
(和rb\u warn\u m
?),然后重新生成Ruby:警告:
”,并在匹配时中止它您还可以潜在地使用DTrace,拦截对
rb\u warn
和rb\u warning
的调用,尽管这不会产生您可以从某处拯救的异常。相反,它只是将它们放在一个您可以轻松记录它们的地方。您最终可以通过覆盖Warning.warn
这样做
module Warning
def warn(msg)
raise msg
end
end
这将使警告变成异常。此解决方案至少从2.4分支起就可以使用。谢谢。一个权威的答案,如果我曾经看到过的话!为“:warning:”监视程序的标准错误输出可能很有用。我提交了一个命令行标志的功能请求,以生成警告异常。。。医生What's RFE收到了一个回复,指出设置$DEBUG=true会导致“格式字符串的参数太多”从警告变为异常。@您的链接过期的医生。新链接: