回调模块内定义的类

Dan*_*iro 6 ruby metaprogramming

Ruby已经有几个内置的回调.这种情况有回调吗?有点像method_added,但对于模块内的类(或常量),而不是类中的实例方法.

Rya*_*oun 4

据我所知,没有什么与你所描述的完全一样的。然而,您可以通过以下方式创建自己的,使用Class::inherited.

module MyModule
  def self.class_added(klass)
    # ... handle it
  end
  class ::Class
    alias_method :old_inherited, :inherited
    def inherited(subclass)
      MyModule.class_added(subclass) if /^MyModule::\w+/.match subclass.name
      old_inherited(subclass)
    end
  end
end

module MyModule
  # now add classes
end
Run Code Online (Sandbox Code Playgroud)