【发布时间】:2009-08-02 19:59:25
【问题描述】:
我认为 Object 是每个人的祖先,包括 Class。 所以我认为应该是 Class.class== Object。 我感到有些困惑和扭曲
【问题讨论】:
我认为 Object 是每个人的祖先,包括 Class。 所以我认为应该是 Class.class== Object。 我感到有些困惑和扭曲
【问题讨论】:
class 返回类(#type)而不是祖先。对象的类是类。类的类是类。类是一个对象。广告中的真相:我从未学过 Ruby,但 Object-Class 关系必须是 Smalltalk 30 年前提出的。
【讨论】:
Class、Object、Module 和所有其他类都是 class 类的instances :)
Class.class== Module.class== Object.class== Hash.class== 类
类也是一个对象(与系统中的任何其他对象一样),但它不是对象的直接实例,它是派生类的实例(本例中的类)
Class.superclass.superclass== 对象(中间有模块)
对象本身也是一个类。所以 Object.class== 类
类、模块和对象具有循环依赖关系,因为它们是 OO 模型的核心。
Object.class.superclass.superclass== 对象
=> parent (.superclass)
-> instance-of (.class)
alt text http://www.grabup.com/uploads/b10b2ffa9976953e3d6f88e6fcbf6f28.png?direct
【讨论】:
Object的类是Class(因为Object本身就是一个类),而Object是Class的祖先。
有一个循环引用,它非常复杂。我个人的建议,如果你真的不需要玩的话,不要去那里。
【讨论】:
这是它在 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
【讨论】: