2009-09-07 94 views
5

In Ruby(1.8.X)为什么Object既包含内核又在Ruby中继承它?

为什么Object既继承Kernel又包含它?不仅继承就够了吗?

 
irb(main):006:0> Object.ancestors 
=> [Object, Kernel] 
irb(main):005:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> nil 

注意,在Ruby 1.9的情况也类似(但有点清洁剂):

 
irb(main):001:0> Object.ancestors 
=> [Object, Kernel, BasicObject] 
irb(main):002:0> Object.included_modules 
=> [Kernel] 
irb(main):011:0> Object.superclass 
=> BasicObject 
irb(main):011:0> BasicObject.superclass 
=> nil 
irb(main):011:0> BasicObject.included_modules 
=> [] 

回答

12

Object不从Kernel继承,这是最后的超类(在Ruby中1.8)。方法#ancestors的结果包括超类包括的模块。具体来说,按顺序查找任何特定的电话。

+2

底线,祖先和超类不会混淆 – 2009-09-08 00:59:02

5

当你在一个类中包含一个模块时,它就成为它的继承层次结构的一部分。因此,通过包含内核Object.ancestors将包含(不是双关语)内核。在红宝石版本< 1.9对象是在层次结构的顶部,所以它没有超类

相关问题