Bla*_*man 2 ruby ruby-on-rails
原始代码如下所示:
module Acme
class Address
STREET_NAME = "123 acme inc drive".freeze
..
..
end
end
Run Code Online (Sandbox Code Playgroud)
这是第三方宝石,我希望我能STREET_NAME以某种方式修改初始化程序中的变量,而无需编辑源代码.这可能吗?
只需重新分配:
Acme::Address::STREET_NAME = "1 Infinite Loop"
Run Code Online (Sandbox Code Playgroud)
冻结一个对象只会冻结:对象,而不是变量(引用)本身.重新分配一个常量会给你一个警告:
警告:已初始化常量
STREET_NAME
因为重新分配一个常量通常不是一个好主意 - 但这是Ruby,并且因为一切都是动态的,所以常量并不是真正的常量.在初始化程序中执行此操作应该可以正常工作.