Instance_eval and Class Variables

Hi again,
The previous email had “instance_eval” in the title, because I meant to
include the contents of this mail in it but then didn’t. It actually
used module_eval, although it makes no difference. This one is a
separate problem:

irb(main):001:0> class Klass
irb(main):002:1> @@foo = "Foo!"
irb(main):003:1> end
=> "Foo!"
irb(main):004:0> Klass.instance_eval{ puts @@foo }
NameError: uninitialized class variable @@foo in Object
from (irb):4
from (irb):4:in instance_eval' from (irb):4:ininstance_eval’
from (irb):4
irb(main):005:0> Klass.module_eval{ puts @@foo }
NameError: uninitialized class variable @@foo in Object
from (irb):5
from (irb):5:in module_eval' from (irb):5:inmodule_eval’
from (irb):5
irb(main):006:0> Klass.new.instance_eval{ puts @@foo }
NameError: uninitialized class variable @@foo in Object
from (irb):6
from (irb):6:in instance_eval' from (irb):6:ininstance_eval’
from (irb):6

Why can’t I get at a class variable from instance_eval? It works fine
for instance variables:

irb(main):001:0> class Klass
irb(main):002:1> def initialize
irb(main):003:2> @instance_foo = "InstanceFoo!"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> Klass.new.instance_eval{ puts @instance_foo }
InstanceFoo!
=> nil

BTW, both this email and the previous one are with 1.8.0-preview3.

Tim Bates

···


tim@bates.id.au

Hello,

The previous email had “instance_eval” in the title, because I meant to
include the contents of this mail in it but then didn’t. It actually
used module_eval, although it makes no difference. This one is a
separate problem:

irb(main):004:0> Klass.instance_eval{ puts @@foo }
NameError: uninitialized class variable @@foo in Object
from (irb):4
from (irb):4:in instance_eval' from (irb):4:in instance_eval’
from (irb):4

This is normal. Class variables are resolved using static scope.

irb(main):005:0> Klass.module_eval{ puts @@foo }
NameError: uninitialized class variable @@foo in Object
from (irb):5
from (irb):5:in module_eval' from (irb):5:in module_eval’
from (irb):5

You’ve found a bug in module_eval. Sorry for inconvenience.

						matz.
···

In message “instance_eval and Class Variables” on 03/08/06, Tim Bates tim@bates.id.au writes: