Получение списка всех модулей в Ruby легко:
ObjectSpace.each_object(Module).to_a
Однако можно ли получить список всех eigenclasses (также известных как одноэлементные классы или метаклассы)? Или невидимые eigenclass?
Я пробовал
str = "foo"
my_metaclass = class << str; self; end
my_metaclass.class == Class # my_metaclass' class is Class
ObjectSpace.each_object(Class).include?(my_metaclass) # false
ObjectSpace.each_object.include?(my_metaclass) # still false
# Just to show each_object works
ObjectSpace.each_object(Class).include?(String) # true
Я пытаюсь получить eigenclasses, потому что я хочу перечислить все методы, которые определены в script. Я мог бы искать все методы экземпляра, определенные модулями и классами, а затем искать методы singleton для модулей и классов (или всех объектов, если я хочу пережевывать процессор), но это кажется немного хакерским.