"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