我怎样才能覆盖这个Ruby变量?

时间:2012-04-22 17:03:18

标签: ruby-on-rails ruby

原始代码如下所示:

module Acme
  class Address
    STREET_NAME = "123 acme inc drive".freeze

    ..
    ..
  end
end

这是第三方gem,我希望我能以某种方式修改初始化程序中的STREET_NAME变量,而无需编辑源代码。这可能吗?

1 个答案:

答案 0 :(得分:9)

重新分配它:

Acme::Address::STREET_NAME = "1 Infinite Loop"

冻结对象只会冻结:对象,而不是变量(引用)本身。重新分配一个常量会给你一个警告:

  

警告:已初始化常量STREET_NAME

因为重新分配一个常量通常不是一个好主意 - 但这是Ruby,因为一切都是动态的,所以常量并不是真的。在初始化程序中执行此操作应该可以正常工作。