This is a bit of a strange problem. Ruby 1.8 resolves constants =20
lexically.

So you are actually referring to ::CONST there.

In Ruby 1.9, this is different. In Ruby 1.9, Constants are resolved by =20=

=B4self=B4.
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 =20
change
in behaviour, I like it.

It doesn't directly answer your question, but I hope it gives you =20
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<br>
>
> class MyObj < Module<br>
>   CONST =3D 'xxx'<br>
>
>   def initalialize(&block)<br>
>      super(&block)<br>
>   end<br>
> end<br>
> <br>
> MyObj.new do<br>
>    puts("CONST =3D #{CONST}")<br>
> end<br>
> <br>
> <br>
> # this will print<br>
> unitialized constant CONST<br>
> <br>
> 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 =20
> 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"
> --=20
> Posted via http://www.ruby-forum.com/.
>

--
Florian Gilcher

smtp:   flo / andersground.net
jabber: Skade / jabber.ccc.de
gpg:    533148E2