解决方法
不幸的是,这不是真正的方法,至少在大多数版本的
Ruby中(可能存在变体),缺少监视程序输出并在标准错误出现警告时中止它.这就是为什么:
Ruby定义了Kernel.warn
,您可以重新定义自己想要的内容(包括退出),以及Ruby希望如何(希望)一致地使用Ruby来报告警告(包括内部的解析警告),但是
在Ruby内部实现(在C中)的方法反过来会直接从source / server.c调用一个名为rb_warn的本地方法,完全绕过了对Kernel.warn的重新定义(例如,“条件中的字符串字面量”警告,例如发出当做这样的事情:do_something如果’string’,通过源/ parse.c的本机rb_warn打印)
>使事情变得更糟,还有一个额外的rb_warning本机方法,Ruby可以使用它来记录如果-w或-v被指定的警告.
所以,如果你只需要根据应用程序代码调用Kernel.warn生成的警告来执行操作,那么只需重新定义Kernel.warn.否则,你有两个选择:
> alter source / error.c在rb_warn和rb_warning(和rb_warn_m?)中退出,并重建Ruby>监视程序的’:warning:’的标准错误输出,并在匹配时中止它