Ruby中的对象、类、模块与方法查找机制
1. Ruby对象与类的内部表示
在Ruby中,对象和类有着独特的内部表示方式。Ruby使用 RObject
结构来表示自定义类的实例以及一些预定义类的实例。 RObject
结构非常简单,它包含一个指向对象类的指针、一个实例变量值的表以及变量的数量。基于此,我们可以对Ruby对象下一个简单的定义:每个Ruby对象都是类指针和实例变量数组的组合。
这个定义十分强大且实用,因为在Ruby中一切皆对象。无论在程序中使用何种值,它都是一个对象,都有类指针和实例变量。
同时,Ruby使用特殊的C结构来表示许多常用的内置类的实例,这些被称为“通用”对象。例如,使用 RString
结构表示 String
类的实例, RArray
表示 Array
类的实例, RRegexp
表示 Regexp
类的实例。尽管这些结构各不相同,但每个通用对象同样保存了类指针和实例变量数组。此外,对于一些简单的值,如小整数和符号,Ruby并不使用C结构来保存,而是直接将这些值存储在原本指向保存该值的结构的 VALUE
指针中。
Ruby类的情况则相对复杂。 RClass
结构与 rb_classext_struct
结构协同工作,保存了大量信息。因此,我们对Ruby类的定义更为复杂:一个Ruby类是一个Ruby对象,它还包含