Simple newbie question

Hi,
I have a piece of code below in which I;
1…make a new NumberList object and append two MyNumber objects.
2…copy the NumberList object and append a further MyNumber object.
However after this both objects are the same.
Any help would be greatly appreciated.
Thanks,
Kieran


class MyNumber
def initialize(x)
@x=x
end
attr_accessor :x
end
class MyNumberList
def initialize
@nums = Array.new
end
def append(num)
@nums.push(num)
self
end
def sum
sum=0
@nums.each {|s| sum += s.x }
return sum
end
end

zl1=MyNumberList.new; zl1.append(MyNumber.new(10));
zl1.append(MyNumber.new(20))
puts zl1.sum
zl2=zl1; zl2.append(MyNumber.new(40))
puts zl1.sum
puts zl2.sum

Hi –

On Thu, 26 Jan 2006, kieran kirwan wrote:

Hi,
I have a piece of code below in which I;
1…make a new NumberList object and append two MyNumber objects.
2…copy the NumberList object and append a further MyNumber object.
However after this both objects are the same.
[…]
zl2=zl1

That’s why they’re the same: by doing this assignment, you’re storing
a new reference to the object in zl2. But it’s still the same object.

David


David A. Black
[email protected]

“Ruby for Rails”, from Manning Publications, coming May 1, 2006!

kieran kirwan [email protected] writes:

Hi,
I have a piece of code below in which I;
1…make a new NumberList object and append two MyNumber objects.
2…copy the NumberList object and append a further MyNumber object.
However after this both objects are the same.
Any help would be greatly appreciated.

See http://www.rubygarden.org/ruby?Make_A_Deep_Copy_Of_An_Object

zl2=zl1;

As said, you doesn’t copy the contents of zl1 in zl2: you make zl2 and
zl1 reference the same objet. What you want to do is to copy the
contents of zl1 into zl2.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs