Где методы определены на верхнем уровне 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 исключает методы суперкласса из списка методов.

Ответы на вопрос(1)

Ваш ответ на вопрос