模块 Warning

Warning 模块包含一个名为 warn 的方法,并且该模块扩展了自身,使得 Warning.warn 可用。对于 Ruby 发出的所有警告,都会调用 Warning.warn。默认情况下,警告会打印到 $stderr。

更改 Warning.warn 的行为有助于自定义 Ruby 如何处理警告,例如,过滤某些警告,和/或将警告输出到 $stderr 之外的其他地方。

如果你想更改 Warning.warn 的行为,你应该使用 Warning.extend(MyNewModuleWithWarnMethod),你可以使用 super 来获取将警告打印到 $stderr 的默认行为。

示例

module MyWarningFilter
  def warn(message, category: nil, **kwargs)
    if /some warning I want to ignore/.match?(message)
      # ignore
    else
      super
    end
  end
end
Warning.extend MyWarningFilter

你永远不应该重新定义 Warning#warn (实例方法),因为那样将不再提供使用默认行为的方法。

warning gem 提供了方便的方式来自定义 Warning.warn