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

この場合、フックが呼び出されないのはなぜですか?

4

2 に答える 2

3

なぜならClass.new、クラスを作成します。これは、クラスが継承され、を呼び出しますinheritedHash.new、クラスを作成せず、を呼び出さないことを意味しますinherited

于 2012-12-15T12:07:40.297 に答える
0

つるはし: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
于 2012-12-15T22:06:47.597 に答える