That is, prefix the method name by a double colon as you would a
constant defined outside of any module [1]. It doesn’t work, though.
Some mechanism like that would be awfully useful in certain cases
(I’ve
personally come across such a case in a real application), and could
be
implemented much less hackishly than Ruby currently allows.
Specifically, what’s needed is a way to access the top-level “module”
within which methods are defined (or are they defined in Object by
default?).
IIUC, there is no “top-level module”. Ruby emulates it for your
convenience if you program a perl-like script be defining all your
methods as private in Object. Thus you can always call them (as you are
always in the same scope).
If you start using Modules (and Classes) than you’re probably after an
OO design. Why would you then put things as “global” and not in a
dedicated namespace/class? The only time you may want to do this is when
you need it from within each object (or for convenience, like Kernel).
If you want to break this paradigm, Ruby lets you do this by calling the
TOPLEVEL_BINDING.
This demostrates two of Ruby’s principles:
- You can do what you want.
- The language has a hidden message about a certain (better) way.