Вы получаете пустой массив, потому что на Foo.public_instance_methods
вы вызываете public_instance_methods
на Foo
, а Foo
не имеет общедоступных методов экземпляра (только Bar
делает).
Если выизмените эту строку на self.public_instance_methods
, она будет работать, как и ожидалось.
class Foo
def self.fuga
pp self.public_instance_methods(false)
end
end
class Bar < Foo
fuga
def hoge
p "fuga"
end
end
Bar.fuga
#=> [:hoge]