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
#=> {}
为什么在这种情况下不会调用钩子?
答案 0 :(得分:3)
因为Class.new
创建了一个类,这意味着一个类被继承,并且调用inherited
,但Hash.new
不会创建一个类,并且不会调用inherited
。
答案 1 :(得分:0)
pickaxe: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