类/对象悖论的混乱

Zab*_*bba 10 ruby

在"The Well Grounded Rubyist"(摘录)一书中,David Black谈到了"Class/Object Chicken-and-Egg Paradox".我很难理解整个概念.

有人可以用更好/更容易/类比/其他术语来解释它吗?

引用(强调我的):

这个类Class本身就是一个例子; 也就是说,它是一个Class 对象.而且还有更多.还记得上课Object吗?嗯,Object 是一个类...但类是对象.所以,Object是一个对象.而且 Class是一堂课.并且Object是一个类,并且Class是一个对象.

哪个先来?Class除非该类Object已存在,否则如何创建该类?但是,如果有一个类可以有实例,那么怎么会有一个类Object (或任何其他类)Class呢?

处理这个悖论的最好方法,至少就目前来说,是忽略它.为了让类和对象系统运行起来,Ruby必须做一些鸡蛋或鸡蛋的东西 - 然后,循环和悖论并不重要.在编程过程中,您只需要知道类是对象,被调用类的实例 Class.

(如果你想简要地知道它是如何工作的,就像这样:每个对象都有一个内部记录,它是一个实例的类,并且对象内部的记录Class指向它Class.)

Phr*_*ogz 13

您可以在此图中看到问题:

Ruby方法查找流程http://phrogz.net/RubyLibs/RubyMethodLookupFlow.png

所有对象实例都继承自Object.所有类都是对象,并且Class是一个类,因此Class是一个对象.但是,对象实例从它们的类继承,并且Object是该类的实例Class,因此Object它本身从中获取方法Class.

然而,正如您在图中所看到的,没有循环查找循环,因为每个类有两个不同的继承"部分":实例方法和"类"方法.最后,查找路径是理智的.

注意:这个图反映了Ruby 1.8,因此不包括BasicObjectRuby 1.9中引入的核心类.

  • "对象继承自Class." 对我来说似乎是假的.Object是Class的一个实例.在1.8中,Object继承自nil.在1.9中,Object继承自BasicObject,而BasicObject继承自nil. (2认同)