Ruby类/对象/模块图说明

Ruby类/对象/模块图说明,ruby,oop,Ruby,Oop,类、模块和对象是相互关联的。在下面的图表中,垂直箭头表示继承,括号表示元类。所有元类都是类的实例 什么是obj?什么是OtherClass?什么是水平箭头?在…的另一边可能是什么 “所有元类都是类的实例”“这是唯一一个地方,在这里,某个东西既是一个实例,又是从中继承的?什么是obj? obj是OtherClass的一个实例。你可以打电话来 obj = OtherClass.new 什么是其他类? 其他类是不在类、模块、对象和基本对象集合中的任何类。您可以通过编写 class OtherClas

类、模块和对象是相互关联的。在下面的图表中,垂直箭头表示继承,括号表示元类。所有元类都是类的实例

什么是obj?什么是
OtherClass
?什么是水平箭头?在…的另一边可能是什么


“所有元类都是
类的实例”
“这是唯一一个地方,在这里,某个东西既是一个实例,又是从中继承的?

什么是obj?

obj
OtherClass
的一个实例。你可以打电话来

obj = OtherClass.new
什么是其他类?

其他类
是不在
模块
对象
基本对象
集合中的任何类。您可以通过编写

class OtherClass
end
尽管核心库类,如
String
Array
也适合这里

什么是水平箭头?

除了从
obj
OtherClass
的箭头外,每个水平箭头都表示调用
.singleton\u class
的行为,该行为返回一个一次性的
class
对象,也称为元类

在“…”的另一边可能是什么?

如果您注意到,图表右半部分的整个结构是通过调用
.singleton_class
从图表左半部分提取元类而派生的。最右边的“…”表示相同模式的递归延续,即对元类本身调用
.singleton\u class
,然后对元类的元类调用
.singleton\u class
,依此类推

所有元类都是类的实例。元类是它继承的唯一实例吗?

同样正确的是,所有类都是
Class
的实例。根据定义,任何类的任何实例都是其继承自的实例

奇怪的是,
BasicObject
的元类是唯一的,因为没有其他对象的类和超类是相同的。其他一些有趣的自参考对象包括:

1)
对象
类对象

Object.is_a?(Object)
# => true

Object.class.superclass.superclass
# => Object
Class.is_a?(Class)
# => true

Class.class
# => Class
Module.is_a?(Module)
# => true

Module.class.superclass
# => Module
BasicObject.is_a?(BasicObject)
# => true

BasicObject.class.superclass.superclass.superclass
# => BasicObject
2)
Class
Class对象

Object.is_a?(Object)
# => true

Object.class.superclass.superclass
# => Object
Class.is_a?(Class)
# => true

Class.class
# => Class
Module.is_a?(Module)
# => true

Module.class.superclass
# => Module
BasicObject.is_a?(BasicObject)
# => true

BasicObject.class.superclass.superclass.superclass
# => BasicObject
3)
模块
类对象

Object.is_a?(Object)
# => true

Object.class.superclass.superclass
# => Object
Class.is_a?(Class)
# => true

Class.class
# => Class
Module.is_a?(Module)
# => true

Module.class.superclass
# => Module
BasicObject.is_a?(BasicObject)
# => true

BasicObject.class.superclass.superclass.superclass
# => BasicObject
4)
BasicObject
类对象

Object.is_a?(Object)
# => true

Object.class.superclass.superclass
# => Object
Class.is_a?(Class)
# => true

Class.class
# => Class
Module.is_a?(Module)
# => true

Module.class.superclass
# => Module
BasicObject.is_a?(BasicObject)
# => true

BasicObject.class.superclass.superclass.superclass
# => BasicObject

哎呀。修复了链接。