4

乍一看,我以为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 的抽象结构?

4

2 回答 2

2

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

*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) {}
于 2014-06-10T03:53:04.893 回答
1

在 Ruby 中,一切都是对象(< BasicObject),类也是。类是类 Class 的对象。类 Object 的对象不一定是类。但是,Object 类必然是一个类,BasicObject 类也是如此。明白了吗?不?让我们继续前进。(正如马茨在他的介绍中所说:)))

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

于 2012-05-31T23:15:11.737 回答