def Object.inherited(c)
puts "class #{c} extends #{self}"
end
c = Class.new
#class #<Class:0xcfe57ac> extends Object
#=> #<Class:0xcfe57ac>
几乎可以正常工作
def Hash.inherited(h)
puts "The Hash is #{h}"
end
h = Hash.new
#=> {}
在这种情况下为什么不调用钩子?
因为Class.new
创建了一个类,也就是说继承了一个类,调用了inherited
,但Hash.new
不创建类,也不调用inherited
。
镐:Class#inherited - cls.inherited(sub_class) 在创建 cls 的子类时由 Ruby 调用。
def Hash.inherited(sub_class)
puts "Hash inherited by #{sub_class}"
end
class MySubHash < Hash
end
$ ruby -w t.rb
Hash inherited by MySubHash