5

可以这样写

class Foo
 MY_CONST = 100
end

也可以改变它Foo::MY_CONST = 123

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

所以Ruby没有常量值?

4

3 回答 3

2

这取决于您想对常量执行哪种操作。

如果你有一个

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
于 2012-08-29T17:41:21.513 回答
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
于 2012-08-29T23:31:07.283 回答
0

它们在语义上是常量,因此您可以期望人们不会更改它们。我称它们为自由常量,见http://pastie.org/4608297

于 2012-08-29T16:11:03.523 回答