Как найти частные синглтон методы
Я определил модуль 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]
У этого последнего есть неудачное требование создания модуля только для того, чтобы его выбросить.