在Hash上继承了钩子

时间:2012-12-15 11:59:53

标签: ruby hook

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
#=> {}

为什么在这种情况下不会调用钩子?

2 个答案:

答案 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