From: James Coglan Date: 2009-04-14T05:46:00+09:00 Subject: Re: changing array values --001636c5b68025afcd046775cdb9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit > 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 > [#, > #, > #, > #, > #] 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) --001636c5b68025afcd046775cdb9--