我正在开发一个项目,其中多个类将包含 MyModule
。在包含该模块后,我希望包含该模块的类将类类型的句柄推送到特定的类级数组。
我在下面尝试过的伪代码没有达到我想要的效果:
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]
。
最佳答案
下面是我的做法。使用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]
关于ruby - 在加载时执行类中包含的模块中的代码(而不是在初始化时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30205089/