On Sep 8, 2004, at 2:00 AM, Olivier D. wrote:
> On 2004-09-08, George Moschovitis <>
> 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.