From: matz@... (Yukihiro Matsumoto) Date: 2002-09-01T01:37:22+09:00 Subject: [ruby-dev:18118] Re: Object#become まつもと ゆきひろです In message "[ruby-dev:18114] Object#become" on 02/08/31, Koji Arai writes: |become は、Object のインスタンスの場合だけ、インスタンス変数 |を引き継ぐようですが、これはオブジェクトの特性がインスタンス |変数の違いでしかあらわれないからといったところでしょうか? いいえ、T_OBJECTでない場合はCLONESETUPの中でコピーされていま す。T_CLASSとT_MODULEの場合にはrb_mod_clone()の中で明示的に コピーされています。 |一般に特異メソッドやインスタンス変数などは引き継がないと考え |た方がよいですよね? cloneでは特異メソッドも含めて引き継ぎます。cloneでもdupでも インスタンス変数は引き継ぎます。 |String#replace は、String#become ですが、Array#replace や |Hash#replace は違うようです。これは何か理由がありますか? |become とreplace を使い分ける上での指針のようなもの。 いまんところ違いはないです。たまたま実装が違うだけ(そのうち マージします)。それから先については悩んでいるんです。 (1) 全部replaceにする (2) 今までreplaceがあったものはbecomeの別名にする (3) becomeをメソッドとしてみせる必要はない まだ決定ではありません。