首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能让ruby把警告当作错误吗?

你能让ruby把警告当作错误吗?
EN

Stack Overflow用户
提问于 2009-03-19 01:14:37
回答 3查看 2.9K关注 0票数 18

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

我这么做的一个原因是为了确保,如果移除一行代码意味着出现警告,我可以选择确保这个突变体被杀死。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-19 14:32:38

不幸的是,没有真正的方法来做到这一点,至少在大多数版本的Ruby上(可能存在变体),缺乏对程序输出的监控,并在出现标准错误警告时中止它。原因如下:

  • Ruby定义了but
  • methods ,你可以来做你想做的任何事情(包括退出),并且你期望(希望) Ruby一致地使用它来报告警告(包括内部的例如解析警告),Ruby内部的but
  • methods原生实现的(用C实现)将反过来从<代码>D18直接调用名为<代码>D17的原生方法,完全绕过<代码>E220的重新定义(例如“<代码>D24”警告,例如,当执行以下操作时发出:do_something if 'string',是通过source/parse.c)
  • to的本机rb_warn打印出来的,这会使事情变得更糟,还有一个额外的rb_warning本机方法,如果指定了-w-v,Ruby可以使用该方法来记录警告。

因此,如果您只需要对应用程序代码调用Kernel.warn**.生成的警告采取操作,那么只需重新定义 Kernel.warn否则,您只有两个选项**:

  1. 更改source/error.c以在rb_warnrb_warning (以及rb_warn_m?)中退出,并重新构建
  2. 监视程序的标准错误输出': warning:',然后在匹配时中止它<代码>H250<代码>G251
票数 34
EN

Stack Overflow用户

发布于 2019-06-08 08:55:42

您最终可以通过覆盖Warning.warn来实现这一点,如下所示

代码语言:javascript
复制
module Warning
  def warn(msg)
    raise msg
  end
end

这会将警告转换为异常。该解决方案至少从2.4分支开始工作。

票数 4
EN

Stack Overflow用户

发布于 2009-04-14 18:46:44

您还可以使用DTrace,并拦截对rb_warnrb_warning的调用,尽管这不会产生您可以从某个地方挽救的异常。相反,它只是将它们放在您可以轻松记录它们的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/660737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档