読者です 読者をやめる 読者になる 読者になる

ウェブサービスを作っています。

dup

class Foo
  attr_accessor :ary

  def initialize
    self.ary = []
  end
end

before = Foo.new
before.ary = [1, 2, 3]
dup = before.dup

dup_ary_copy = dup.ary
dup_ary_copy.reverse!
p before.ary  #=> [3, 2, 1]

dup したところで、複製されたオブジェクトのインスタンス変数の object_id まで変わるわけじゃないですよね。
リファレンスをよく読むと書いてあります。


複製されたオブジェクトの object_id が変わるのは、複製されたオブジェクトに新しいオブジェクトがセットされたときであって、たとえば上のコードで dup = before.dup の後に dup.ary = [4, 5, 6] みたいな行を入れてあげれば、最終行の結果は [1, 2, 3] になる。


Ruby の変数代入は名札付けに過ぎないんですよね。
理解してるつもりで全然理解してなくて、本当にだめだめです。
入れ物ではない、入れ物ではない、入れ物ではない。