たけ(tk)です

 初心者むけの解説で、「String の破壊的メソッドは予期しない結果をもたら
す可能性があるので、使わないようにしましょう」などと書いているうちに思っ
たのですが・・、

 新規に作成される文字列をすべて freeze するモード、というのがあると間違
いが少なくなるのではないかと思いました。

具体的には、

(1)String に @@freeze_mode というクラス変数を用意して、

 String.freeze_mode = true

で @@freeze_mode を変更する。

(2)@@freeze_mode =true の場合には、それ以後作成される文字列が原則とし
てすべて freeze される。String#melt、String::new(str,false)の場合を除く。

(3)String#melt で、その文字列の freeze されない複製を返す。破壊的メソッ
ドを使う場合には String#melt で複製を取り出してから使う。

(4)String.freeze_mode = false なら現在の仕様と同じ(デフォルト)。

(5)String::new(str, freeze=String.freeze_mode) とする。

** 文字列は String#new 以外で作られることが多いので、内部の改造が必要。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武