2012-08-29 9 views
5

それはこのようにRubyには定数がありませんか?

class Foo 
MY_CONST = 100 
end 

を書くことは可能だし、それがFoo::MY_CONST = 123

ルビーコンパイラからの警告があります変更することも可能ですが、とにかく定数が変更されます。

Rubyには一定の値はありませんか?

+3

を与える - http://stackoverflow.com/questions/2441524/closest-ruby-representation-of-a-private-static-final-and-public-static - 最終的な#2442640 – dfb

+0

関連する:http://stackoverflow.com/q/1977780/38765 –

答えて

3

それはあなたの定数で何をしたいのかによって決まります。

あなたは

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 
0

これらは意味的に定数なので、変更しないと期待できます。私はそれらを自由な定数と呼んでいます。http://pastie.org/4608297

+2

これは変更することができます。たとえ人々がそれらを変えたいと思わないかもしれないとしても。 –

2

あなたfreezeFOO場合は、FOO::MY_CONSTを再割り当てしようとすると、例外RuntimeErrorが作成されますすることができます。

class FOO 
    MY_CONST = 100 
end 

FOO.freeze 
FOO::MY_CONST = 123 

は、間接的に関連する

RuntimeError: can't modify frozen Class 
関連する問題