Using 1.8.4 on OSX.

class CopyTest
 attr_accessor :one
end

a = CopyTest.new
a.one = [1,2,3,4]
b = a.clone
a.freeze

b.one.each_with_index do |item,index|
 b.one.delete_at(index) if item == 2
end

# this is supposed to delete the first item in the array that matches
# instead of all matching items

b.one #=> [1,3,4]

No surprises so far...

a.one #=> [1,3,4]

Now that is weird.

a #=> #<CopyTest:0x35a4ec @one=[1, 3, 4]>
b #=> #<CopyTest:0x348698 @one=[1, 3, 4]>

Not the same object, so why does changing one affect the other?

if you do this....

a.one = [1,2,3,4]
b=a.clone
b.one = [4,3,2,1]

then things work normally
a.one #=> [1,2,3,4]
b.one #=> [4,3,2,1]

I suspect there is a bug in the 'delete_at' function or in the way that  
objects are cloned that causes them to refer to the same array in some cases.

Thoughts?

a.one = [1,2,3,4] #=> TypeError: can't modify frozen object

Strange, I also managed to change a frozen object this way.

_Kevin
www.sciwerks.com
-- 
Posted with http://DevLists.com.  Sign up and save your mailbox.