On Sep 8, 2004, at 2:00 AM, Olivier D. wrote:

> On 2004-09-08, George  Moschovitis <george.moschovitis / gmail.com> 
> wrote:
>>
>> x = 0
>>
>> 1.times {
>> x = 1
>> puts x
>> }
>>
>> puts x
>>
>> prints:
>> 1
>> 0
>
> If I do this on my machine, it prints 1 and 1.
>
> What version of Ruby have you installed? I have the version 1.8.1
> and it works as advertised in the book "Programming Ruby" (chapter
> "The Ruby Language"):
> "If instead a variable of the same name is already established at the
> time the block executes, the block will inherit this variable."
>
> Your 1.times block inherits the x variable and modifies it (or maybe
> it's time for me to compile Ruby version 1.8.2?)

Currently, creating the variable beforehand *ensures* that it will be 
inherited into the block. So, currently, this code snippet should print 
1 and 1. I tested it on a 1.9 snapshot ( a few months old, granted), 
and the old 1.6.7 that's installed on one of my machines, and they both 
print 1 and 1.

IIUC, in the future, *all* variables will leak out, except those in 
argument lists. So still, that wouldn't change the behavior of this 
code snippet.

In the future, I believe you will be able to get this effect this way:

x = 0

1.times do |x|
   x = 23
   puts x #=> prints "23"
end

puts x   #=> prints "0"

If I am wrong, someone please correct me :)

cheers,
Mark


> -- 
> Olivier D.