Andreas Launila wrote: > Joel VanderWerf wrote: >> Andreas Launila wrote: >>> The line "f.bar" will work fine, but "f.foo" will fail with "NameError: >>> uninitialized constant Foo::BAR". Is there some way to have the method >>> defined in the original class pick up on the constant in the metaclass >>> (without altering "p BAR")? >>> >> Yes, with a little wrangling: >> >> class Object >> def singleton_class >> class << self; self; end >> end >> end >> >> class Foo >> def foo >> p self.singleton_class::BAR >> end >> end >> >> > > Yes that works, but I'm specifically looking for something that does not > alter the line "p BAR". To get around that one would have to dynamically > set the constant BAR in the main class before executing "p BAR". A > problem with that comes when one has multiple instances and metaclasses, > one would end up changing the value of a constant each time the method > is invoked. Thanks for the reply though. Oops, sorry. It doesn't seem possible to use const_missing to do this, because const_missing is called on Foo (not on the instance or the singleton class) and there is no way to identify the instance of Foo in the const_missing method. -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407