2

原始代码如下所示:

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

    ..
    ..
  end
end

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

4

1 回答 1

9

只需重新分配它:

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

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

警告:已经初始化的常量STREET_NAME

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

于 2012-04-22T17:11:04.037 回答