哪个首先出现在Ruby类或BasicObject中?

时间:2012-05-31 23:02:39

标签: ruby oop class inheritance object

乍一看,我认为BasicObject只是“奠定”Class(阅读:Class继承自BasicObject

Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
Module.ancestors #=> [Module, Object, Kernel, BasicObject]
Object.ancestors #=> [Object, Kernel, BasicObject]
BasicObject.ancestors #=>[BasicObject] 

但事情突然变得非常好奇。

Class.class #=> Class
Module.class #=> Class
Object.class #=> Class
BasicObject.class #=> Class

“啊哈!我想。”我们真的在制作ClassBasicObject = Class.new的实例。但后来我记得所有这些实例都位于底层Class的层次结构中Class < Module < Object < Kernel < BasicObject

这些类中的每一个都是同时的对象。反过来,系统似乎非常循环。层次结构开始的地方以及它如何与自身融合以形成Ruby的抽象结构?

2 个答案:

答案 0 :(得分:1)

在Ruby中,一切都是Object(&lt; BasicObject),类也是如此。类是Class类的对象。 Object类的对象不一定是一个类。但是,类Object是必需的类,因此类BasicObject也是如此。懂了吗?没有?让我们继续。 (正如Matz在他的介绍中所说:)))

(换句话说,你做对了。)

答案 1 :(得分:1)

重新打开僵尸问题,添加我漂亮的图表:)

*Class*
  ↓
BasicObject ~= 'Parent class of all classes but "inherits" from [Class] - causing an interrelated loop'
  ↓
Object      ~= Class.new(BasicObject) {}
  ↓
Module      ~= Class.new(Object) {}
  ↓
*Class*     ~= Class.new(Module) {}