如何覆盖 Ruby 中的 class 变量

How to override class variable in Ruby

我试图在 https://github.com/activemerchant/active_merchant/blob/master/lib/active_merchant/billing/credit_card.rb 的第 315 行覆盖 'requires_name' 方法或其变量,以便不执行第 328 行的检查。在澳大利亚,付款时通常不会收集卡名,因此我试图传入 nils。我没有得到任何工作。

我试过 class_variable_set 比如:

ActiveMerchant::Billing::CreditCard.class_variable_set(:@@requires_name, Proc.new do
    false
end)

我在这里尝试了 requires_name 和 require_name。没有区别。

我试过:

ActiveMerchant::Billing::CreditCard.requires_name = Proc.new do
    false
end)

我尝试过其他各种方法。我该如何覆盖它?

您可以覆盖该方法,但设置该方法返回的值更容易:

ActiveMerchant::Billing::CreditCard.require_name = false

在内部,require_name 存储为 class 实例变量:

ActiveMerchant::Billing::CreditCard.instance_variable_get(:@require_name)
#=> false