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.