"Gavin Sinclair" <gsinclair / soyabean.com.au> schrieb im Newsbeitrag news:421724876381.20040201225914 / soyabean.com.au... > On Sunday, February 1, 2004, 10:19:53 PM, Robert wrote: > > > >> The problem is that when you use 'class M::C' to open a class, you > >> can't access constants declared in M, whereas if you use 'module M; > >> class C', you can. > >> > >> 1) Why is this? > > > Because when doing "class M::C" you're still in another scope while defining > > class C. So you have to explicitely scope constants from module M. (see > > below) > > "Another scope"? Sounds convincing, but I don't know what it means. > 'self' is the same object in the following two examples: > > module M > class C > p self.id > end > end > > class M::C > p self.id > end It's the other self, the one that is used for the const lookup I guess: module M p self.id class C; end end p self.id class M::C;end > >> 2) Is is an intentional behaviour of Ruby? > > > I think so. > > Can it be justified in terms of correctness, language design > principles, POLS, convenience, expedience, or anything else? > > To my mind, the way things work (scope-wise) should depend on the > value of 'self' and little if not nothing else. see above. Just my 0.02 EUR robert