Ruby没有常量值?

时间:2012-08-29 15:36:59

标签: ruby constants

可以这样写

class Foo
 MY_CONST = 100
end

也可以更改Foo::MY_CONST = 123

Ruby编译器会发出警告,但无论如何都会改变常量。

所以Ruby没有恒定值?

3 个答案:

答案 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