From: Arun Kumar Date: 2008-05-02T21:16:03+09:00 Subject: Re: Beginner Question on Ruby ------=_Part_8995_30642321.1209730560857 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello David, Thanks for the answer. But would you know why it is so? Is there something syntactic or semantic issue that I am making, the reason i ask this is... n = 10 x += n does a perfect x = nil + n => n initialization, which is good and explainable. In the array case however, One would expect [atleast i am :) ] the elements of the source array [if any] be appended to the target. Now why is the reference going in making it a recursive :? sorry if this question is lame or bozo but i feel a clear behaviour enables clear understanding or would require even more clearer reasoning. Cheers Arun On Fri, May 2, 2008 at 5:27 PM, David A. Black wrote: > Hi -- > > > On Fri, 2 May 2008, Arun Kumar wrote: > > Hi all, > > > > I am beginning to learn ruby and cant seem to reason this behaviour. I > > expect since empty or nill is the array, arr*n shouldnt change it. > > > > Why is this behaviour so? > > > > Code: > > > > num_arr = Array.new > > puts "Num Alpha: #{num_arr} and size: #{num_arr.size}" > > puts "Num Alpha: #{num_arr << num_arr} and size: #{num_arr.size}" > > num_arr.insert(-1, num_arr << num_arr) > > puts "Num Alpha: #{num_arr} and size: #{num_arr.size}" > > > > Output: > > > > Num Alpha: and size: 0 > > Num Alpha: [...] and size: 1 > > Num Alpha: [...][...][...][...][...][...][...][...][...] and size: 3 > > > > You're inserting an array into itself. Ruby represents that kind of > recursive inclusion with dots. > > irb(main):005:0> a = [] > => [] > irb(main):006:0> a << a > => [[...]] > > > David > > -- > Rails training from David A. Black and Ruby Power and Light: > INTRO TO RAILS June 9-12 Berlin > ADVANCING WITH RAILS June 16-19 Berlin > INTRO TO RAILS June 24-27 London (Skills Matter) > See http://www.rubypal.com for details and updates! > > ------=_Part_8995_30642321.1209730560857--