【发布时间】:2019-10-21 08:13:08
【问题描述】:
在基类的self.inherited方法中,传递了子类,调用子类的name方法代替调用基类方法。虽然同样的事情如果在其他地方的同一个类上调用相同的方法
class A
def self.name
"a"
end
def self.inherited(subclass)
puts B.hash
puts B.name
end
end
class B < A
def self.name
"b"
end
end
puts B.hash
puts B.name
输出:
1428955046062147697
a
1428955046062147697
b
【问题讨论】:
-
inherited是在创建子类之前还是之后启动? -
有趣的事实:内置的
name方法在任何一种情况下都会返回"B"(因为使用class关键字时,常量赋值发生在回调之前)。 -
在
class B < A之后添加行puts "cat"并查看它何时显示。