Gdzie są metody zdefiniowane na najwyższym poziomie rubinowym?
Na najwyższym poziomie definicja metody powinna skutkować prywatnymi metodamiObject
i testy wydają się to potwierdzać:
def hello; "hello world"; end
Object.private_instance_methods.include?(:hello) #=> true
Object.new.send(:hello) #=> "hello world"
Jednak poniżej działa również na najwyższym poziomie (self.meta
jest klasą własnąmain
):
self.meta.private_instance_methods(false).include?(:hello) #=> true
Wygląda na to, żehello
metoda jest jednocześnie definiowana na klasie własnej zarówno głównej, jak iObject
. Co się dzieje? Zauważ, żefalse
parametr doprivate_instance_methods
wyklucza metody superklasy z listy metod.