Как найти частные синглтон методы

Я определил модуль Vehicle как такой

module Vehicle
  class <<self
    def build
    end

    private

    def background
    end
  end
end

Вызов Vehicle.singleton_methods возвращается [:build],

Как я могу проверить все частные одноэлементные методы, определенные Vehicle?

1 ответ

Решение

В Ruby 1.9+ вы можете просто сделать:

Vehicle.singleton_class.private_instance_methods(false)
#=> [:background]

В Ruby 1.8 все немного сложнее.

Vehicle.private_methods
#=> [:background, :included, :extended, :method_added, :method_removed, ...]

вернет все приватные методы. Вы можете отфильтровать большинство из объявленных снаружи, выполни

Vehicle.private_methods - Module.private_methods
#=> [:background, :append_features, :extend_object, :module_function]

но это не совсем все из них, вам нужно создать модуль, чтобы сделать это

Vehicle.private_methods - Module.new.private_methods
#=> [:background]

У этого последнего есть неудачное требование создания модуля только для того, чтобы его выбросить.

Другие вопросы по тегам