Лучший способ найти детей модуля? - PullRequest
4 голосов
/ 04 мая 2010

Это то, что у меня есть, но оно также находит классы и другие константы ... есть ли лучший способ?

class Module
    def children
        constants.collect { |c| const_get(c) }.compact
    end
end

1 Ответ

7 голосов
/ 04 мая 2010

Под «детьми» вы подразумеваете модули, вложенные в данный модуль, верно? Ничего общего с наследственными отношениями?

Предполагая, что вы имеете в виду только вложенные модули, должно работать следующее:

class Module
    def children
        constants.collect { |c| const_get(c) }.
            select { |m| m.instance_of?(Module) }
    end
end

РЕДАКТИРОВАТЬ: Возможно, вам придется использовать constants(false) для предотвращения постоянного поиска модулей дальше по цепочке наследования.

...