为什么Object都包含内核并在Ruby中继承它?

Sam*_*ron 5 ruby

在Ruby(1.8.X)

为什么Object都继承了内核并包含它?不仅仅是继承就足够了吗?

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
=> []

Gar*_*eth 12

Object不继承Kernel,它是最终的超类(在Ruby 1.8中).该#ancestors方法的结果包括超类包含的模块.具体来说,按顺序查找任何特定的呼叫.

  • 底线,祖先和超类不要混淆 (2认同)

enn*_*ler 5

在类中包含模块时,它将成为其继承层次结构的一部分.因此,通过包含Kernel Object.ancestors将包括(没有双关语)内核.在ruby版本中<1.9对象位于层次结构的顶部,因此它没有超类