Как получить общедоступные методы класса без унаследованных методов?

учитывая любой объект, который я могу вызвать #public_methods и посмотреть все методы, на которые он будет реагировать. Тем не менее, я считаю, что иногда было бы полезно получить быстрый список всех общедоступных методов, которые не наследуются, т. е. вещи, которые действительно являются частью этого класса.

Я нашел в "простой способ перечислить общедоступные методы для объекта Ruby" что, если я использую:

(Foo.public_methods - Object.public_methods).sort

Я могу отфильтровать много основных вещей Ruby. Я хотел бы иметь возможность фильтровать все, что было унаследовано вверх по цепочке. Если я знаю родительский класс, я могу фильтровать его, но я хотел бы придумать общую команду, которая могла бы вернуть массив незарегистрированных открытых методов для любого объекта.

2 ответов


просто передать false на


посмотри модуль#. Этот метод имеет один логический аргумент 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]