このように書くことは可能です
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を参照してください。