K
Kevin Olbrich
Using 1.8.4 on OSX.
class CopyTest
attr_accessor ne
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
class CopyTest
attr_accessor ne
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