金谷です。

以下のソースコードで、ちょっとどうしても分からない部分があります。
それぞれの要素にあるデータを加工させるのですが、
元のデータは取っておきたいので、複製を作成させて
複製したものを加工する動作を行わせていたのですが、
それでも加工元(イテレータのブロック変数 eachgraph)にも
影響が行ってしまいます。
p で見てみると、オリジナルのデータと複製のデータが同じなんです。

Ruby経験がまだ浅いのと、イレテータを使うのは初めてなので
勘違いがあるかも知れませんが、誰かご教授お願いします。


-----------------------
def evaluate
  @geneTable.collect! do |eachgraph|
    p eachgraph  #<=加工前。まだ問題なし
    lgraph = eachgraph.dup  #<=元データ内容を保持したい予定なので複製

    #複製したものをいろいろ加工
    lgraph.vertex.each do |eachvtx|  #for all coverable vertex
      if eachvtx.cover then      #if this vertex is coverable
        eachvtx.linked.each do |eachlink|
          lgraph.vertex[eachlink].removelink(eachvtx.graphID)
        end
      end
    end

    p eachgraph  #<=加工後、eachgraphとlgraphのデータが同じになる
    p lgraph     #eachgraphと同じ内容
-----------------------
---------------------- 
Atsushi Kanaya
  Toyohashi Univercity of Technology
  Dept. of Information and Computer Sciences
    mailto:kanaya / ss.ics.tut.ac.jp