IRB与Ruby对象模型
我是Ruby的初学者,正在尝试理解它的对象模型 在IRB中。我创建了一个名为IRB与Ruby对象模型,ruby,oop,Ruby,Oop,我是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 >
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
这个图表准确吗?
提前谢谢。关于Ruby类,还有对象,这就是类的类实际上是
类的原因
这就解释了为什么:
Class.class #=> Class
MyClass.class #=> Class
Class.class == MyClass.class #=> true
您不是通过每个类的实例调用class
,而是通过类本身调用它。与以下内容几乎相同:
"hey".class #=> String
"jude".class #=> String
"hey".class == "jude".class #=> true
以下是您一开始可能期望的:
MyClass.new.class #=> MyClass
Class.new.class #=> Class
MyClass.new.class == Class.new.class #=> false
请看这里以了解对象模型。@ArupRakshit有迄今为止关于该主题的最佳解释。谢谢您,先生。您可以使用:MyClass.祖先=>[MyClass,Object,Kernel,BasicObject]
,Class.祖先=>[Class,Module,Object,Kernel,BasicObject]
轻松显示这些关系。我总是觉得这非常有用: