From: Florian Gilcher Date: 2009-10-10T12:48:58+09:00 Subject: Re: Scope of constants in instance_eval This is a bit of a strange problem. Ruby 1.8 resolves constants lexically. So you are actually referring to ::CONST there. In Ruby 1.9, this is different. In Ruby 1.9, Constants are resolved by ´self´. So, in short: class A module B end end A.new.instance_eval do B end crashes in 1.8, but resolves B as A::B in 1.9. Some people hate that change in behaviour, I like it. It doesn't directly answer your question, but I hope it gives you enough insight to find a way to do what you want. Regards, Florian On Oct 10, 2009, at 12:14 AM, Peter Pk wrote: > > so If I do
> > class MyObj < Module
> CONST = 'xxx'
> > def initalialize(&block)
> super(&block)
> end
> end
>
> MyObj.new do
> puts("CONST = #{CONST}")
> end
>
>
> # this will print
> unitialized constant CONST
>
> So how do I create a "constant" ie: attribute with leading upper case > char that is resolvable within "instance_eval()" for a particular > instance of a class that defines the constant or subclass of it or > class > that includes a module that defines the constant? > > I tried overriding "const_missing" but as a static method on class > Object I see no way to determine the "self" that was active when the > constant was not resolved, If so I could then make it happen, by > examinig the "self" for it's class etc and look for the constants in > them :) > > Kind of like i'd like to be able to get caller[0].binding.self inside > "const_missing" > > This so it can be like Java to get "this.CONST" > -- > Posted via http://www.ruby-forum.com/. > -- Florian Gilcher smtp: flo@andersground.net jabber: Skade@jabber.ccc.de gpg: 533148E2