2016-05-09 2 views
2

Существует хороший трюк, который помогает найти наследственные подклассы:Как найти модули или классы, содержащие модуль?

class SubClasses 

    @@subclasses ||= [] 

    def self.inherited subclass 
    @@subclasses << subclass 
    end 

    def self.subclasses 
    @@subclasses 
    end 
end 

Кроме того, я нашел, что это полезно, чтобы найти модули, включенные в дочерних классах с Foo.included_modules.

Но оно не доступно на Module. Как я могу получить все классы, которые включают модуль? Является ли это возможным?

UPDATE

Решено!

Getting a list of classes that include a module

+0

Я почти что этот вопрос, как дубликат, который вы связаны, но этот вопрос начинается с ответа на ваш вопрос и переходит к чему-то более сложному, поэтому ваша задача лучше справляется с вопросом о том, что находится в названии. –

ответ

2

Для контроля, когда модуль включается в другой модуль или класс, используйте included крюк:

module Parent 
    class << self 
    attr_reader :includers 
    end 

    def self.included(base) 
    @includers ||= [] 
    @includers << base.name 
    end 
end 
+0

Спасибо! Это гораздо более правильный и быстрый способ, чем смотреть бросить все «ObjectSpace» :) Итак, теперь я знаю 2 способа –

+0

Майк, Руби не поработает, пот, просматривая все классы. Для Ruby 2.3.0 'ObjectSpace.each_object (класс) .to_a.size # => 533'. Кстати, мне нравится ответ, на который вы ссылаетесь по ссылке. Хороший ответ, @Dave. –

Смежные вопросы