James Coglan
4/13/2009 8:46:00 PM
[Note: parts of this message were removed to make it a legal post.]
> For some reason, when I run the code below:
>
> class TEST
> def initialize(args)
> @args = args
> end
> def describe
> return @args.join(", ")
> end
> end
>
>
> def test
> old = [0,0,0,0,0,0]
> tests = []
> 5.times do |i|
> new = old
> new[rand(old.size)] = rand(5) # randomly changes one of the members
> of the array to a number from 0 to 4
> tests[i] = TEST.new(new)
> puts tests[i].describe
> end
> return tests
> end
>
> I get this output:
>
> 0, 0, 0, 0, 0, 0
> 0, 0, 0, 0, 0, 1
> 0, 0, 0, 0, 0, 4
> 0, 0, 0, 2, 0, 4
> 0, 0, 1, 2, 0, 4
> [#<TEST:0x3f3d9f0 @args=[0, 0, 1, 2, 0, 4]>,
> #<TEST:0x3f3d9d8 @args=[0, 0, 1, 2, 0, 4]>,
> #<TEST:0x3f3d900 @args=[0, 0, 1, 2, 0, 4]>,
> #<TEST:0x3f3d828 @args=[0, 0, 1, 2, 0, 4]>,
> #<TEST:0x3f3d750 @args=[0, 0, 1, 2, 0, 4]>]
When you set 'new = old', you're just creating another reference to the same
array. To copy the array, use 'new = old.dup'. (dup = duplicate)