클래스의 객체가 있고 dup
으로 복제하려고합니다. 인스턴스 변수 중 하나는 배열이며 참조하는 것처럼 보입니다. 나는 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
은이를 참조하지 않습니다.