Hello everyone,
I found the following ruby idiom in "The Ruby Way":
x = 0
1.times {
x = 1
puts x
}
puts x
prints:
1
0
essentialy this trick creates a new scope. Is there a more elegant
way to do it?
George Moschovitis
ps: The Ruby Way is a very nice book!
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?)
···
On 2004-09-08, George Moschovitis <george.moschovitis@gmail.com> wrote:
x = 0
1.times {
x = 1
puts x
}
puts x
prints:
1
0
--
Olivier D.
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
···
On Sep 8, 2004, at 2:00 AM, Olivier D. wrote:
On 2004-09-08, George Moschovitis <george.moschovitis@gmail.com> > wrote:
--
Olivier D.
Mark Hubbart wrote:
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:
I think there's also going to be a local-method. Like this:
x = 1
local do |x|
x = 23
p x # => 23
end
p x # => 1
cheers,
Mark
Regards,
Florian Gross
Is there something i can do now?
George Moschovitis ha scritto:
Is there something i can do now?
maybe try another ruby binary?