From: Hiroyuki Iwatsuki Date: 2007-08-02T08:57:48+09:00 Subject: [ruby-list:43778] Re: gsub! で定数を書き換えられてしまう 岩月と申します。 定数というのはあくまでオブジェクトの器の話で、 二回目以降の代入の際に警告される変数と考えていいと思います。 foo = 1 foo = 2 #これはOK FOO = 1 FOO = 2 # 警告が出る ですので、定数に代入したオブジェクトそのものと、 変数に代入したオブジェクトそのものは同じ扱いです。 オブジェクトそのものを書き換え禁止にするには Object#freezeを使います。 FOO = "hello" FOO.freeze # 定数FOOではなく、"hello"というオブジェクトに対する操作 FOO.gsub!(/hello/, 'bye') # 例外 TypeError が発生する ただし、この場合にも定数には新たにオブジェクトを 代入できますので注意してください。 FOO = "hello".freeze FOO.gsub!(/hello/, 'bye') # 例外 TypeError が発生する FOO = "bye" # 警告は出るが、代入は行われる -- IWATSUKI Hiroyuki