我正在做一个项目,其中多个类将包括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
Run Code Online (Sandbox Code Playgroud)
加载后,我希望Poly.tracking等于[MyClass1, MyClass2].
这是我将如何做到的。使用类实例变量而不是类变量。添加一个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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |