I tested this script with "Try Ruby! (in your browser)"
(http://tryruby.hobix.com/\).
RUBY_VERSION
=> "1.8"
eval "a=1"
=> 1
a
=> 1
It is the same as my expectation. But when I try with Ruby 1.9 in my
computer...
irb(main):001:0> RUBY_VERSION
=> "1.9.0"
irb(main):002:0> eval "a=1"
=> 1
irb(main):003:0> a
NameError: undefined local variable or method `a' for main:Object
...
I read from somewhere that now Ruby can't dynamically create local
variable. Is it true or just a bug?
Sorry with my poor english.
···
--
Posted via http://www.ruby-forum.com/\.
Thairuby Thairuby wrote:
I read from somewhere that now Ruby can't dynamically create local
variable. Is it true or just a bug?
Sorry with my poor english.
In Ruby 1.8, all evals under a given scope (like, at the same scoped level in a method) used the same shared local variable scope. That scope grew as needed to accommodate new variables.
In Ruby 1.9, every eval gets its own scope. This provides better isolation between evals, which has both positive and negative side effects. On the positive side, the code inside an eval can use a faster representation of local variables that doesn't depend on being able to grow. On the negative side, you can't do things like this anymore:
eval "a = 1"
eval "puts a"
- Charlie