Где методы определены на верхнем уровне ruby?
На верхнем уровне определение метода должно приводить к закрытомуObject
и тесты, кажется, подтверждают это:
def hello; "hello world"; end
Object.private_instance_methods.include?(:hello) #=> true
Object.new.send(:hello) #=> "hello world"
Тем не менее, следующее также работает на верхнем уровне (self.meta
это собственный классmain
):
self.meta.private_instance_methods(false).include?(:hello) #=> true
Похоже, чтоhello
метод определяется одновременно на собственном классе главного иObject
, В чем дело? Обратите внимание, чтоfalse
параметр дляprivate_instance_methods
исключает методы суперкласса из списка методов.