我正在开展多个课程将包含MyModule
的项目。在包含模块之后,我希望包含该模块的类将类类型的句柄推送到特定的类级数组。
Psuedocode我在下面尝试过没有达到我想要的效果:
class Poly
@@tracking = []
end
module MyModule
def initialize(klass)
Poly.tracking << self # Where `self` is the class, e.g. `MyClass1`, not an instance of the class.
end
end
class MyClass1
include MyModule
end
class MyClass2
include MyModule
end
加载后,我希望Poly.tracking
等于[MyClass1, MyClass2]
。
答案 0 :(得分:4)
这是我怎么做的。使用class instance variable而不是类变量。添加included
方法,当模块包含在类中时,该方法作为回调运行:
class Poly
def self.tracking
@tracking ||= []
end
end
module MyModule
def self.included(base)
Poly.tracking << base
end
end
class MyClass1
include MyModule
end
class MyClass2
include MyModule
end
puts Poly.tracking.inspect #=> [MyClass1, MyClass2]