Как получить общедоступные методы класса без унаследованных методов?
учитывая любой объект, который я могу вызвать #public_methods
и посмотреть все методы, на которые он будет реагировать. Тем не менее, я считаю, что иногда было бы полезно получить быстрый список всех общедоступных методов, которые не наследуются, т. е. вещи, которые действительно являются частью этого класса.
Я нашел в "простой способ перечислить общедоступные методы для объекта Ruby" что, если я использую:
(Foo.public_methods - Object.public_methods).sort
Я могу отфильтровать много основных вещей Ruby. Я хотел бы иметь возможность фильтровать все, что было унаследовано вверх по цепочке. Если я знаю родительский класс, я могу фильтровать его, но я хотел бы придумать общую команду, которая могла бы вернуть массив незарегистрированных открытых методов для любого объекта.
2 ответов
посмотри модуль#. Этот метод имеет один логический аргумент include_super
следует ли также возвращать унаследованные методы. Значение по умолчанию-true.
Вы можете использовать следующие:
class A
def method_1
puts "method from A"
end
end
class B < A
def method_2
puts "method from B"
end
end
B.instance_methods # => [:method_1, :method_2, ...]
B.instance_methods(false) # => [:method_2]