From: Mark Hubbart Date: 2005-05-17T06:39:49+09:00 Subject: Re: Problems with the "outer scope" operator On 5/16/05, Lothar Scholz wrote: > Hello Martin, > > MH> not sure if I entirely understand what you mean, but consider this: > > MH> class Outer > MH> end > > MH> class Inner > MH> class Outer > MH> end > > MH> class Child1 < Outer > MH> end > > MH> class Child2 < ::Outer > MH> end > MH> end > > MH> Without the leading '::', Child2 would derive from Inner::Outer and not ::Outer. > > Okay thats a good example that i understand. > But why does somebody write > > module SOAP > module RPC > class SOAPlet > class RequestRouter < ::SOAP::RPC::Router > end > end > end > end > > As soon as "::" is found inside the superclass doesn't this > automatically mean we start the lookup inside the toplevel scope ? > > Or would a "class RequestRouter < SOAP::RPC::Router" declaration really > look for the following classes and and takes the first it finds in > this order: > > SAOP::RPC::SOAPlet::SOAP::RPC::Router > SAOP::RPC::SOAP::RPC::Router > SAOP::SOAP::RPC::Router > SOAP::RPC::Router Actually, it could easily fail if not for the leading :: See here: module One; module Two; module Three; end end end ==>nil module One::Two::Three class One end end ==>nil module One::Two::Three class Uno < One::Two::Three::One end end NameError: uninitialized constant One::Two::Three::One::Two from (irb):11 The subclasssing fails because it finds a constant named "One" in the current scope, then fails to find "Two" as a subconstant. This results in a NameError. > And this raises one more question for me. Is there any differences in > the lookup mechanism between nesting inside a module or a class ? > > Sorry for the line noise, i posted this by accident to the core > mailing list and not to the ruby-user list. And i hope someday we have a > written (english !) formal language definition where i can find all > the answers. > > -- > Best regards, emailto: scholz at scriptolutions dot com > Lothar Scholz http://www.ruby-ide.com > CTO Scriptolutions Ruby, PHP, Python IDE 's > >