为什么Object.class == Ruby中的类?

时间:2009-08-02 19:59:25

标签: ruby oop

我认为对象是每个人的祖先,包括Class。 所以我认为它应该是Class.class == Object。 我觉得有点困惑和扭曲

4 个答案:

答案 0 :(得分:10)

类返回类(#type)而不是祖先。对象的类是Class。班级是班级。类是一个对象。广告中的真相:我从未学过Ruby,但是对象类关系已经成为30年前提出的Smalltalk。

答案 1 :(得分:9)

Class,Object,Module和所有其他类是类的实例:)

Class.class == Module.class == Object.class == Hash.class == Class

Class也是一个Object(与系统中的任何其他对象一样),但它不是Object的 direct 实例,它是派生类的实例(在这种情况下的类)

Class.superclass.superclass == Object(模块位于中间)

对象本身也是一个类。所以Object.class == Class

Class,Module和Object具有循环依赖关系,因为它们位于OO模型的核心。

Object.class.superclass.superclass == Object

=> parent (.superclass)
-> instance-of (.class)

alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct

答案 2 :(得分:6)

Object的课程为Class(因为Object本身就是一个类),ObjectClass的祖先。

有一个循环引用,它非常复杂。我个人的建议,如果你真的不需要玩它,就不要去那里。

答案 3 :(得分:5)

这是它在ruby 1.9中的工作方式:

Class.class = Class

Class.superclass = Module
Module.class = class
Module.superclass = Object
Object.class = Class
Object.superclass = BasicObject
BasicObject.class = Class
BasicObject.superclass = nil