--001636c5c272fb19d30498ada74b
Content-Type: text/plain; charset=UTF-8

Ah, this makes a lot more sense now, thanks!

On Thu, Dec 30, 2010 at 11:07 PM, Anurag Priyam <anurag08priyam / gmail.com>wrote:

> > I'm sure I'm just missing some finer point of modules as namespaces. But
> can
> > someone explain to me why line 26 in http://pastie.org/1418890 gives an
> > error (uninitialized constant Bar::B::A), but line 25 doesn't? I thought
> the
> > two modules would have the same structure. Thanks!
>
> What you are missing is the way Ruby resolves the name of constants.
> It first tries to find the constant in the "lexical scope" of the
> reference - immediately enclosing module/class, then the next
> enclosing module/class, and so on. By defining Bar::B as "class
> Bar::B; end" and not "module Bar; class B; end; end" you are changing
> the scope in which the constant A should be resolved. You can find out
> the modules/classes that are searched by calling Module.nesting
> method; see http://pastie.org/1418923
>
> --
> Anurag Priyam,
> 3rd Year Undergraduate,
> Department of Mechanical Engineering,
> IIT Kharagpur.
> +91-9775550642
>
>

--001636c5c272fb19d30498ada74b--