From: "古川大輔" Date: 2007-08-02T08:24:27+09:00 Subject: [ruby-list:43777] gsub! で定数を書き換えられてしまう はじめまして。もぎゃ と申します。 さっそくなのですが、ちょっと腑に落ちないことがあるので教 えてくださいませ。  定数文字列に対してgsub!を使うと、その文字列、書き換え ができてしまうみたいで、びっくりしております。 環境 $ ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-freebsd6] 再現手順: $ irb irb(main):001:0> TESTSTR="apple orange" => "apple orange" irb(main):002:0> TESTSTR.gsub!('apple','banana') => "banana orange" 現在の結果:gsub!を使うと定数文字列でも書き換えられてし まう 自分の期待する結果:TESTSTRは定数なので、書き換えようと したらエラーになってほしい 考察:  当然、普通に書き換えを行うとエラーになります。 irb(main):003:0> TESTSTR="hogehoge" (irb):3: warning: already initialized constant TESTSTR => "hogehoge"  つまり、定数はポインタの書き換えを許さないだけで、その 先の中身まで保護しません、ということでしょうか。  でも、こんな簡単に定数の中身が置き換わるのは心臓に悪い ので勘弁してほしいのですが、これって仕様なのでしょうか? /mogya