2013-12-18 169 views
0

我希望能够做到这一点:访问类包括模块

class IncludingClass 
    include IncludedModule 
end 

module IncludedModule 
    self.parent_class # => IncludingClass, I wish 
end 

任何想法?对不起,为简洁起见。在手机上输入这个。无论如何,我环顾四周,一直未能找到这个,这对于这样一个可编程语言来说似乎令人惊讶。

回答

1

我不相信模块跟踪包含它们的内容。但是,当他们被包含在内时,他们会触发MyModule.included(SomeClass)方法作为回调,因此您可以跟踪自己。

module IncludedModule 

    # Array to store included classes 
    @@included_classes = [] 

    # Called when this module is included. 
    # The including class is passed as an argument. 
    def self.included(base) 
    @@included_classes << base 
    end 

    # Getter for class variable 
    def self.included_classes 
    @@included_classes 
    end 
end 

# Include the module 
class IncludingClass 
    include IncludedModule 
end 

# Ask the module what included it. 
puts IncludedModule.included_classes #=> [IncludingClass] 

有可能也是抓取声明的所有课程,并要求他们的方式,他们通过SomeClass.included_modules包括哪些但这是一种毛茸茸的,并会慢得多。

+0

那真的很酷。不确定它会在我的情况下工作,但它是一个有趣的解决方案。谢谢! – Sasha