Получение констант и подклассов - PullRequest
0 голосов
/ 27 февраля 2012
  1. Какой самый короткий способ получить константы, принадлежащие модулю A? Если я сделаю A.constants, он даст массив символизированных имен констант A, а не массив констант A. Я особенно спрашиваю об этом, потому что с ancestors это более просто: A.ancestors возвращает массив его предков, а не массив символизированного имени предков.

  2. Какой самый короткий способ получить массив непосредственных подклассов класса B?

1 Ответ

1 голос
/ 27 февраля 2012

Дано:

class A;        end
class A::B < A; end
  1. Используйте const_get для доступа к константам модулей по символу:

    A.constants.map { |constant| A.const_get constant }
    # => [A::B]
    
  2. Вы можете искать подклассы среди всех существующих классов:

    ObjectSpace.each_object(Class).select { |klass| klass.superclass == A }
    # => [A::B]
    ObjectSpace.each_object(Class).select { |klass| klass.superclass == A::B }
    # => []
    
...