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创建了一个类,也就是说继承了一个类,调用了inherited,但Hash.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 回答