Можно ли получить все собственные классы в Ruby?

Получить список всех модулей в Ruby очень просто:

ObjectSpace.each_object(Module).to_a

Однако можно ли получить список всех собственных классов (также известных как одноэлементные классы или метаклассы)? Или собственные классы невидимы?

Я пробовал

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

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

13
задан Andrew Grimm 19 October 2011 в 03:50
поделиться