我不相信模块跟踪包含它们的内容。但是,当他们被包含在内时,他们会触发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
包括哪些但这是一种毛茸茸的,并会慢得多。
那真的很酷。不确定它会在我的情况下工作,但它是一个有趣的解决方案。谢谢! – Sasha