【发布时间】:2014-01-16 17:54:43
【问题描述】:
我是 Ruby 的初学者,正在尝试了解其对象模型。
在 IRB 中。我创建了一个名为MyClass 的类并开始检查对象模型,如下所示:
2.1.0p0 :013 > MyClass.class
=> Class
2.1.0p0 :014 > MyClass.superclass
=> Object
2.1.0p0 :015 > Class.class
=> Class
2.1.0p0 :016 > Class.superclass
=> Module
2.1.0p0 :017 > Object.class
=> Class
2.1.0p0 :018 > Object.superclass
=> BasicObject
2.1.0p0 :019 > BasicObject.class
=> Class
2.1.0p0 :020 > BasicObject.superclass
=> nil
问题 1
当MyClass.class == Class.class 返回true 时,为什么Myclass.superclass 和Class.superclass 不同?
2.1.0p0 :021 > Class.class == MyClass.class
=> true
换句话说:为什么它们的超类不同?
问题 2
这张图准确吗? Diagram's Link
提前谢谢你。
【问题讨论】:
-
看这里stackoverflow.com/questions/19045195/…了解对象模型..
-
@ArupRakshit 到目前为止有关于这个主题的最佳解释。谢谢先生。
-
您可以使用Module#ancestors 轻松展示这些关系:
MyClass.ancestors => [MyClass, Object, Kernel, BasicObject]、Class.ancestors => [Class, Module, Object, Kernel, BasicObject]。 -
我一直觉得这很有帮助:hokstad.com/ruby-object-model.html