For example, you see files called rails/actionpack/lib/action_controller/base.rb which adds methods and such to the open module ActionController. What scope is ActionController in? Is it just called the global scope? Obviously, there is namespace resolution lookup. And a good example of this is in the Base class of the same file. It references one module like this: AbstractController::Layouts and another module like this: Rendering. One uses the :: namespace resolution operator, because Layouts module is not within the scope that class Base is, which is module ActionController scope, so it has to reference AbstractController which must be in the GLOBAL scope in order for ruby to find it and then it can look there to find Layouts. In contrast, Rendering is defined within the ActionController scope, and since class Base is defined within the ActionController scope as well, it doesn't need to use the :: operator. It can simply search within that scope and find the module Rendering. So what is that global scope that ActionController and AbstractController are in within Rails?
on 2012-09-21 19:30
on 2012-09-27 02:30
Top-level methods or constants defined outside of any class or module are implicitly defined in Object.
on 2012-09-27 06:47
> Top-level methods or constants defined outside of any class or module > are implicitly defined in Object. Methods attach themselves to whatever the current class is when they are defined. If self is a class when the method is defined, then the method becomes an instance method in that class. If self is not a class when the method is defined, then the current class is self's class. puts self puts self.class --output:-- main Object def do_stuff end self is the object called 'main', which ruby creates for you on startup, and it is not a class, so do_stuff() attaches to self's class, which is Object.