代码在初始化器内运行良好,但从另一个类调用时会中断

问题描述 投票:0回答:1

我有一个小猴子补丁来处理一些不需要的 ruby 2.7 警告,当我直接从初始化程序文件执行代码时,它工作得很好,但是当我将代码移动到 lib 目录并从使用包含所有测试的初始化程序开始中断

module Extensions
  module BigDecimalFormatWarningSuppressor
    # NOTE: this API comes from ActiveSupport::NumericWithFormat, the last ancestor prepended to
    # BigDecimal.
    def to_s(args)
      original_verbosity = $VERBOSE
      $VERBOSE = nil
      v = super
      $VERBOSE = original_verbosity
      v
    end
  end
end

BigDecimal.prepend(Extensions::BigDecimalFormatWarningSuppressor)

因此,为了将所有猴子补丁放在一个地方,我们开始将它们移动到 lib(extensions) 中的目录,并开始使用简单的 include 在初始化程序中调用它们。

include Extensions::BigDecimalFormatWarningSuppressor

问题是:当我直接在初始化程序内部运行此代码时,一切都像魅力一样工作,但是当我按上面的方式运行代码时,许多测试开始中断:

/path/lib/extensions/big_decimal_format_warning_suppressor.rb:14:in `to_s'
/path/lib/extensions/big_decimal_format_warning_suppressor.rb:14:in `to_s': wrong number of arguments (given 2, expected 0) (ArgumentError)
ruby-on-rails ruby-on-rails-2
1个回答
0
投票

疯狂的猜测,但我认为这是因为你正在使用prepend。当您预先添加内容时,它会更早加载到堆栈中,并且可以稍后被覆盖,因此在您的情况下最好避免它。

尝试使用 extendinclude 来代替。

© www.soinside.com 2019 - 2024. All rights reserved.