gpt4 book ai didi

ruby - 在加载时执行类中包含的模块中的代码(而不是在初始化时)

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:18 25 4
gpt4 key购买 nike

我正在开发一个项目,其中多个类将包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com