From: gabriele renzi Date: 2004-02-10T05:14:58+09:00 Subject: Re: Newbiest ? ever il Tue, 10 Feb 2004 02:56:28 +0900, "Orion Hunter" ha scritto:: >(ruby 1.8.0 Linux) > >I don't understand why I get the following behavriour: > >irb(main):001:0> matrix = Array.new( 3, Array.new( 4, 0 ) ) >=> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] >irb(main):002:0> matrix[0][0] = 1 >=> 1 >irb(main):003:0> matrix >=> [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] >irb(main):004:0> > >I would have expected the assignment of matrix[0][0] to produce a matrix: >[[1,0,0,0],[0,0,0,0][0,0,0,0]] > >What am I not getting here? Array.new(num,object) just creates num refernces to object: irb(main):001:0> a=Array.new(3,'yo') => ["yo", "yo", "yo"] irb(main):002:0> a[0].id => 20896272 irb(main):003:0> a[1].id => 20896272 what you want is different object with the same value, you can do this with: irb(main):004:0> a=Array.new(3) {'yo'} => ["yo", "yo", "yo"] irb(main):005:0> a[0].id => 20863668 irb(main):006:0> a[1].id => 20863656 so you should write: matrix= Array.new(3) do Array.new(4,0) end or just do: require 'matrix' :)