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

标签 ruby

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

相关文章:

ruby - 最快的 Ruby 记录器实现是什么?

ruby - 如何计算迭代器调用 yield 的次数?

ruby - 如果键不存在创建默认值

ruby-on-rails - Rails - 如何从模型创建数据库表(我没有迁移脚本)

ruby - Ruhoh - 每 x 项插入标签

ruby-on-rails - 如何从(YAML)哈希中递归删除所有具有空值的键?

ruby - 在 HTTPS 网站上实现 Mechanize

Ruby 2.0 字节码导出/导入

ruby - rbenv 和 bundler 的 Gem 问题

ruby-on-rails - 捆绑安装项目gemfile时出错