可以这样写
class Foo
MY_CONST = 100
end
也可以更改Foo::MY_CONST = 123
Ruby编译器会发出警告,但无论如何都会改变常量。
所以Ruby没有恒定值?
答案 0 :(得分:2)
这取决于你想对你的常数采取什么样的行动。
如果你有
ARRAY = [1,2,3]
#and then
ARRAY << 4
Ruby不会抱怨。
但是,如果你
ARRAY = [1,2,3].freeze
#and
ARRAY << 4
#RuntimeError: can't modify frozen Array
你仍然可以
ARRAY = [1,2,3,4]
#warning: already initialized constant ARRAY
答案 1 :(得分:1)
如果您freeze
FOO
,则尝试重新分配FOO::MY_CONST
会产生RuntimeError。
class FOO
MY_CONST = 100
end
FOO.freeze
FOO::MY_CONST = 123
给出
RuntimeError: can't modify frozen Class
答案 2 :(得分:0)
它们是语义常量,因此您可以期望人们不要更改它们。我称之为自由常数,请参阅http://pastie.org/4608297