Inconsistency about ruby 'main' object
===

Ruby is pretty consistent about classes and objects. However, when it comes to top-level method declaration, that rule somehow breaks down. For example, 

    $ puts self # => main
    $ puts self.class # => Object

However, the methods declared in the context of this `main` object are somehow available as private methods of class `Object`.

Is there any logical explanation for this? I understand that this is very convenient as these methods appear as "stand-alone functions", but taking it just as "it just is so" breaks the otherwise consistent rules, as normally you have to define a method in the context of a class for it to be a method of that class. However, the `main` object is not class `Object`, nor is it a class at all.