我有一個類的對象,我想用dup
複製它。其中一個實例變量是一個數組,它似乎是引用它。我認爲dup實際上創建了一個DUPLICATE。實例變量在'dup'後仍然引用
這裏是我的IRB會議:
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
將保持不變,因爲dup
創建一個全新的變量,而不是引用。
另請注意,如果您要用G::initialize
中的標量替換[1,2,3]
,則dup
將不會引用它。