eval and dynamic local variable creation in Ruby 1.8 vs 1.9

  • Thread starter Thairuby Thairuby
  • Start date
T

Thairuby Thairuby

I tested this script with "Try Ruby! (in your browser)"
(http://tryruby.hobix.com/).
=> 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.
 
C

Charles Oliver Nutter

Thairuby said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,152
Members
46,697
Latest member
AugustNabo

Latest Threads

Top