Wo sind Methoden auf Ruby-Top-Level definiert?

Auf der obersten Ebene sollte die Methodendefinition dazu führen, dass private Methoden aktiviert werdenObject, und Tests scheinen dies zu belegen:

def hello; "hello world"; end

Object.private_instance_methods.include?(:hello) #=> true
Object.new.send(:hello) #=> "hello world"

Das Folgende funktioniert jedoch auch auf oberster Ebene (self.meta ist die Eigenklasse vonmain):

self.meta.private_instance_methods(false).include?(:hello) #=> true

Es scheint, dass diehello Die Methode wird gleichzeitig für die Eigenklasse von main und on definiertObject. Was ist los? Notiere dass derfalse Parameter aufprivate_instance_methods Schließt übergeordnete Methoden aus der Methodenliste aus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage