如何抑制弃用警告?

How to suppress deprecation warnings?

(这与 this 问题有关)。

如何在找到时间更新代码之前抑制 Ruby 中的弃用警告?示例:以下命令将生成 flip-flop is deprecated 警告(命令本身是无意义的;我只是想提供一个最小的、语法正确的示例):

 ruby -v -e '0 if /a/.../b/'

我已经试过了

ruby -e '$VERBOSE=nil;0 if /a/.../b/'

并且,在安装 warning gem 之后,

 ruby -e 'require "warning";; Warning.ignore(/deprecated/) 0 if /a/.../b/'

但警告仍打印到标准错误。我不想将整个 stderr 重定向到位桶,因为我不想丢失重要消息。

我认为是:

ruby -W0 -e 'code'

警告是在评估代码之前由解析器生成的。这包括您的 Warning.ignore 代码,因此在出现警告时配置尚未准备好。

您可以将该代码移至单独的文件中:

# warn.rb
require 'warning'
Warning.ignore(/deprecated/)

并通过-r加载它:

$ ruby -r./warn.rb -e '0 if /a/.../b/'

触发器不再被弃用。

实际问题的答案:ruby -W:no-deprecated