可以这样写
class Foo
MY_CONST = 100
end
也可以改变它Foo::MY_CONST = 123
Ruby 编译器会发出警告,但无论如何都会更改常量。
所以Ruby没有常量值?
这取决于您想对常量执行哪种操作。
如果你有一个
ARRAY = [1,2,3]
#and then
ARRAY << 4
鲁比不会抱怨。
但是,如果你
ARRAY = [1,2,3].freeze
#and
ARRAY << 4
#RuntimeError: can't modify frozen Array
你还可以
ARRAY = [1,2,3,4]
#warning: already initialized constant ARRAY
如果您freeze
FOO
, 则尝试重新分配FOO::MY_CONST
将创建一个 RuntimeError。
class FOO
MY_CONST = 100
end
FOO.freeze
FOO::MY_CONST = 123
给
RuntimeError: can't modify frozen Class
它们在语义上是常量,因此您可以期望人们不会更改它们。我称它们为自由常量,见http://pastie.org/4608297