Joel VanderWerf <vjoel / PATH.Berkeley.EDU> wrote in message news:<3EBDCC8F.6080208 / path.berkeley.edu>... > Nathan Weston wrote: > > In ruby 1.6.8, overriding class variables cause weird (to me at least) > > results: > > > > class Foo > > Const = 0 > > > > def c > > Const > > end > > end > > > > class Bar < Foo > > Const = 1 > > end > > > > print Bar.new.c > > > > will print "0". Apparently, since Bar.c really calls Foo.c, when it > > looks up the class variable Const, it looks it up in Foo. > > However, this seems odd to me -- I expected the above code to print > > "1". > > Is it supposed to work this way (and if so, why?), or have I > > discovered a bug in ruby? > > I think this is because constants are scoped statically. One way to get > around that is to define Foo#c by: > > def c > self.class::Const > end > > This forces dynamic scope. Ah, that was exactly what I wanted. Thanks. Nathan