2016-05-09 74 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(Class).to_a.size#=> 533'。顺便说一句,我喜欢你在链接中提到的答案。好答案,@Dave。 –