From: Tim Pease Date: 2007-01-03T06:22:54+09:00 Subject: Re: Strange behaviour with array of arrays On 1/2/07, Dan Stevens (IAmAI) wrote: > Please observe the following code: > > # Create an array of arrays by explicitly stating values > test1 = [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]] > => [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]] > > # Create an array of arrays using new method > test2 = Array.new(3, Array.new(3)) > => [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]] > > #Both arrays appear to be equal > test1 == test2 => true > > # Modifying one of values behaves as expected > test1[1][1] = true => true > test1 => [[nil, nil, nil], [nil, true, nil], [nil, nil, nil]] > > # Modifying one of values behaves strangely > test2[1][1] = true => true > test2 => [[nil, true, nil], [nil, true, nil], [nil, true, nil]] > > Can anyone explain why this is happening as I don't understand why the > two array should behave differently? This is assuming this isn't a > bug. > The syntax you want is this ... test2 = Array.new(3) {Array.new(3)} This will create a new array of three elements and then create a a new array object for each element of test2 test2 = Array.new(3, Array.new(3)) This will create a new array of three elements but use the same object for element of test2 Blessings, TwP