From: Minero Aoki Date: 2001-06-13T10:37:58+09:00 Subject: [ruby-list:30210] Re: .dup がされてないらしい ? あおきです。 In mail "[ruby-list:30208] Re: .dup がされてないらしい ?" Atsushi Kanaya wrote: >  金谷です。 > > > eachgraph がコンテナのように見えますが、dup で deep copy して > > ないということでは。 > >  コンテナというのはブロック変数、という意味でいいんですよね? 違います。eachgraph が指しているオブジェクトがコンテナだという ことです。適当に言うと、インスタンス変数を使ってるオブジェクトは 全部コンテナです。 > これをdupすれば深いコピーができると思ったのですが > どうも浅いコピーの方になってしまうようです。 dup は浅いコピーをするのが仕様です。そうなっている理由は、リンクが 循環している場合にうまい解決方法がない、などです。深いコピーをする には Marshal を使って duplicated = Marshal.load( Marshal.dump(obj) ) とするのが定石となってます (Marshal は循環リンクも正しく扱う)。 あるいは eachgraph のレベルだけ値が保持できればいいのなら専用の dup メソッドを書いてもいいです。 ------------------------------------------------------------------- 青木峰郎