`

struct RClass

阅读更多
In Ruby, classes exist as objects during the execution. Of course. So there must be a structure for class objects. That structure is struct RClass. Its structure type flag is T_CLASS.

As class and modules are very similar, there is no need to differentiate their content. That’s why modules also use the struct RClass structure, and are differentiated by the T_MODULE structure flag.
▼ struct RClass

 300  struct RClass {
 301      struct RBasic basic;
 302      struct st_table *iv_tbl;
 303      struct st_table *m_tbl;
 304      VALUE super;
 305  };


(ruby.h)

First, let’s focus on the m_tbl (Method TaBLe) member. struct st_table is an hashtable used everywhere in ruby. Its details will be explained in the next chapter “Names and name tables”, but basically, it is a table mapping names to objects. In the case of m_tbl, it keeps the correspondence between the name (ID) of the methods possessed by this class and the methods entity itself.

The fourth member super keeps, like its name suggests, the superclass. As it’s a VALUE, it’s (a pointer to) the class object of the superclass. In Ruby there is only one class that has no superclass (the root class): Object.

However I already said that all Object methods are defined in the Kernel module, Object just includes it. As modules are functionally similar to multiple inheritance, it may seem having just super is problematic, but but in ruby some clever changes are made to make it look like single inheritance. The details of this process will be explained in the fourth chapter “Classes and modules”.

Because of this, super of the structure of Object points to struct RClass of the Kernel object. Only the super of Kernel is NULL. So contrary to what I said, if super is NULL, this RClass is the Kernel object (figure 6).
分享到:
评论

相关推荐

    javaStruct

    @StructClass public class Foo { @StructField(order = 0) public byte b; @StructField(order = 1) public int i; } ``` 在这个例子中,`Foo`类有两个字段:一个字节`b`和一个整数`i`。使用JavaStruct,可以...

    Struct2实例

    class User(Struct): username = String() hashed_password = String() email = String() class Session(Struct): session_id = String() expiration_time = DateTime() ``` 接下来,我们需要实现登录逻辑。...

    linux class.docx

    在这个模型中,设备及其类别是通过 `struct class` 和 `struct class_device` 来管理的。这些结构体不仅为内核提供了设备管理的基础框架,还为用户空间的应用程序提供了访问设备的接口。 ### 设备节点的动态创建 #...

    在驱动模块初始化函数中实现设备节点的自动创建.pdf

    `class_create(…)`函数在`drivers/base/class.c`中实现,其主要作用是动态分配一个`struct class`结构体并初始化。返回的`struct class`指针可以用于后续的`device_create(…)`调用来创建设备节点。当不再需要这个...

    在驱动模块初始化函数中实现设备节点的自动创建

    首先,需要了解 struct class 结构体,在 Linux 内核中定义了这个结构体,顾名思义,一个 struct class 结构体类型变量对应一个类。这个类存放于 sysfs 下面,可以使用 class_create 函数来创建一个类。class_create...

    深入C++中struct与class的区别分析

    本篇文章是对C++中struct与class的区别进行了详细的分析介绍,需要的朋友参考下

    浅析Swift中struct与class的区别(汇编角度底层分析)

    在Swift编程语言中,struct(结构体)和class(类)是两种主要的复合类型,它们都用于封装数据和行为。然而,它们之间存在着显著的差异,这些差异不仅体现在语法层面,更深入到内存管理和性能优化等底层机制。本文将...

    linux class.pdf

    1. **struct class**:在Linux内核中,`struct class`是一个结构体,它代表一类设备,比如字符设备、块设备等。它包含了与设备类别相关的操作和属性,用于描述设备的共性。 2. **struct class_device**:这个结构体...

    EDA/PLD中的如何在C++中struct与Class的的区别

    在C++编程语言中,`struct`和`class`关键字主要用来定义自定义类型,但它们之间存在一些微妙的区别,特别是在EDA(电子设计自动化)和PLD(可编程逻辑器件)这样的领域,对代码的严谨性和效率有着严格要求。...

    runtime.pptx

    通过以上分析可以看出,在Objective-C运行时中,每个类都有一个`struct objc_class`结构体来描述其基本信息,而具体的实例变量、方法、属性等信息则通过扩展结构体`struct class_rw_t`和`struct class_ro_t`来存储。...

    sac.rar_visual c

    在编程世界中,C++是一种强大的面向对象编程语言,它提供了两种主要的用户自定义数据类型:`class`和`struct`。虽然它们在很多方面相似,但有一些关键的区别,这些区别使得`class`和`struct`在不同场景下有着各自的...

    在驱动模块初始化函数中实现设备节点的自动创建.docx

    这种方法依赖于内核中的`struct class`结构体和相关的函数,如`class_create()`和`device_create()`。 `struct class`是一个内核结构,代表一类设备,比如字符设备或块设备。它包含了关于设备类的各种信息,如类名...

    Linux驱动程序开发-设备驱动模型

    Linux 中使用 struct class 和 struct class_device 来管理不同类别的设备。Class 的主要作用是提供一个通用的接口,以便不同的设备驱动程序可以注册和使用。 Bus 是 Linux 设备驱动模型中的一种总线结构,负责...

    Class to struct

    - **类(Class)**:C++中的面向对象特性之一,用于定义对象的行为和属性。 - **结构体(Struct)**:C和C++中的一种数据类型,用于组合不同类型的变量。在C++中,结构体可以包含成员函数。 - **函数指针**:指向...

    Linux设备驱动模型详解

    - `void class_unregister(struct class *class);`:注销一个设备类别。 4. **驱动程序操作** - `int driver_register(struct device_driver *driver);`:注册一个驱动程序。 - `void driver_unregister(struct ...

    Swift-Class-Struct Swift-Class-Struct

    在Swift编程语言中,`Class`和`Struct`是两种主要的复合类型,它们用于创建自定义的数据结构和实现特定的功能。本篇文章将深入探讨Swift中的`Class`和`Struct`,以及它们之间的区别和使用场景。 首先,我们来看`...

    Desktop_struct与class的区别_

    在C++编程语言中,`struct`和`class`都是用于定义数据结构的关键词,但它们之间存在一些关键区别,这些区别主要体现在访问控制、默认成员访问修饰符和默认构造函数上。 首先,访问控制是两者最显著的区别。在`class...

Global site tag (gtag.js) - Google Analytics