如何在Ruby中拦截类定义?

时间:2013-02-23 13:54:21

标签: ruby interception

是否可以编写可以告诉我何时定义Ruby类的内容?

1 个答案:

答案 0 :(得分:2)

是!

class Object  
  def self.inherited(base)
    puts "#{base} inherited from object"
  end
end

class Animal
end

class Cat < Animal
end

运行上面的代码会打印以下内容:

Animal inherited from object
Cat inherited from object

基本上,只要定义了一个继承自定义的类的类,就会触发self.inherited回调。把它放在Object那就是任何类! (虽然可能有一些特殊情况例外,我现在想不到。)

我应该添加免责声明,尽管有可能这样做(因为Ruby作为一种语言有多棒),是否建议这样做,特别是在用于生产用途的代码中,我是不太确定。嗯,实际上,我确定。这将是个坏主意。