回调模块内定义的类

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

据我所知,没有什么与你所描述的完全一样。 但是,这是使用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 

您可以通过定义自己的def_class方法来尝试这种方法:

 module M def self.const_missing(name) const_set(name, Class.new) end def self.def_class(klass, &block) class_added(klass.name) klass.class_eval(&block) end end module M def self.class_added(klass) puts "new class added: #{klass}" end def_class Hello do def hello puts "hello!" end end end h = M::Hello.new.hello #=> "hello!"