From: Robert Dober Date: 2007-01-28T04:26:24+09:00 Subject: Re: Question about variable scope ------=_Part_58696_13725971.1169925981534 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 1/27/07, Thomas Hafner wrote: > > "robin" wrote/schrieb < > 1169920481.252703.112350@a75g2000cwd.googlegroups.com>: > > > 2.times{|n| i,j = n,i; puts "i=#{i}, j=#{j.inspect}"} > > > > Can you explain why j is nil rather than 0, the second time round? > > I'll try. Everytime the block is executed, new variables n, i and j > are created, because they don't already exist outside the block. If > you want i to be shared, it should already exist before, e.g.: > > i = nil > 2.times{|n| i,j = n,i; puts "i=#{i}, j=#{j.inspect}"} maybe OP thought that i,j = n,i is semantically equivalent to i=n j=i but it is not :(, which is good :) the assignments are performed in parallel, and i is still nil when assigned to j. But this is very useful thus one can e.g. swap the value of two variables as follows a,b = b,a HTH Robert > Regards > Thomas > > -- "The best way to predict the future is to invent it." - Alan Kay ------=_Part_58696_13725971.1169925981534--