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

fwo*_*ncn 5 ruby oop

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

Rem*_*anu 10

class返回类(#type)而不是祖先.对象的类是Class.班级是班级.类是一个对象.广告中的真相:我从未学过Ruby,但是Object-Class关系必须是30年前提出的Smalltalk.

  • 元类在Ruby中的工作方式不同:它们被注入到方法查找链中,因此Ruby没有类和元类的两个并行层次结构,但正如您所说,基础是相同的. (4认同)

Vit*_*ner 9

类,对象,模块和所有其它类是实例一的类:)

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

类也是一个Object(与系统中的任何其他对象一样)但它不是Object的直接实例,它是派生类的实例(在本例中为Class)

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

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

类,模块和对象具有循环依赖关系,因为它们位于OO模型的核心.

Object.class.superclass.superclass == Object

=> parent (.superclass)
-> instance-of (.class)
Run Code Online (Sandbox Code Playgroud)

替代文字http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct


Sin*_*our 6

Object的阶级是Class(因为Object它本身就是一个阶级),并且Object是一个阶级的祖先Class.

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


enn*_*ler 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
Run Code Online (Sandbox Code Playgroud)