私はクラスのオブジェクトを持っていますので、それをdup
と複製したいと思います。インスタンス変数の1つは配列であり、それを参照しているようです。私はdupが実際に重複を作成したと思った。 dup
を参照しない、全く新しい変数を作成するため、インスタンス変数は 'dup'の後でも参照されています
irb(main):094:0> class G
irb(main):095:1> attr_accessor :iv
irb(main):096:1> def initialize
irb(main):097:2> @iv = [1,2,3]
irb(main):098:2> end
irb(main):099:1> end
=> nil
irb(main):100:0> a=G.new
=> #<G:0x27331f8 @iv=[1, 2, 3]>
irb(main):101:0> b=a.dup
=> #<G:0x20e4730 @iv=[1, 2, 3]>
irb(main):103:0> b.iv<<4
=> [1, 2, 3, 4]
irb(main):104:0> a
=> #<G:0x27331f8 @iv=[1, 2, 3, 4]
私はa
が変わらないことを期待する:
は、ここに私のIRBセッションです。
[1,2,3]
をG::initialize
のスカラーに置き換える場合、dup
はそれを参照しません。