From: YASUI Kentarow Date: 2000-03-12T23:45:18+09:00 Subject: [ruby-list:21350] Re: 引数コピーとオブジェクト指向 安井です。 > class Perosn > def initialize(name) > @name = name > end > end > > name = 'John' > john = Person.new (name) > name.sub! (/.*/, 'Paul') > もしこれを安全側に傾けるなら、freezeを使うのが良いんじゃないかと思うんです が。そんでPersonクラスに@nameを変更するメソッドを用意する、と。 dupを使うと今度は、name.sub!(/.*/,'Paul')が「本当に」johnインスタンスの名 前を変更したいときに混乱するんではないでしょうか? 既に誰か言っていたらすいません。 class Person def initialize(name) set_name(name) end def set_name(name) @name=name @name.freeze end end name='John' john=Person.new(name) name.sub!(/.*/,'Paul') --> Error でも、知らずに使ったら訳わかんないかも。freezeしたとき、「その」Stringが 変更された場合の例外をキャッチしてエラーメッセージが出せれば良いけど。 @name.freeze { print 'Can't change name. Use Person#set_name.' } みたいに(実は既にあったりして)。 -- 「ゴルゴダ・タワーの神は臆病者には微笑まない」 YASUI Kentarow http://www.alles.or.jp/~kenyasui/