读完ruby hacking guide第6章,彻底总结下:
1.在Ruby中,类也是一个对象,因此有实例变量。类的实例变量、类变量、常量都是存储在RClass struct的iv_tbl中,
struct RClass {
struct RBasic basic;
struct st_table *iv_tbl;
struct st_table *m_tbl;
VALUE super;
};
iv_tbl的类型是st_table,我在
这里用java实现了一下。
2.用户自定义类的对象(ruby层次声明的类的对象)的实例变量存储在RObject struct的iv_tbl中,
struct RObject {
struct RBasic basic;
struct st_table *iv_tbl;
};
调用方法,本质上是一个查表操作。buildin的几个类,比如String、Array、Hash等(在c层次上实现的类),它们的结构并没有 iv_table,这是从节省内存空间的角度考虑,它们的实例变量存储在一张全局的st_table中。这张表比较特别,其中的每一个对应的值又是一个 st_table,也就是一个“二元结构”,第一层结构是类名与实例变量表的映射,第二层才是实例变量名与实际值的映射。
3.全局变量存储在一张全局的st_table中,这个表的键就是变量名ID,由于全局变量允许通过alias来设置别名,因此这张全局表中真正存储的是下面这个struct
334 struct global_entry {
335 struct global_variable *var;
336 ID id;
337 };
324 struct global_variable {
325 int counter; /* 引用计数 */
326 void *data; /* 变量值 */
327 VALUE (*getter)(); /* 取值函数 */
328 void (*setter)(); /* 设置函数 */
329 void (*marker)(); /* 标记函数 */
330 int block_trace;
331 struct trace_var *trace;
332 };
(variable.c)
当不同变量名(通过别名声明)指向的是同一个全局变量,其实它们指向的是同一个struct global_variable。
分享到:
- 2007-09-27 11:44
- 浏览 2278
- 评论(0)
- 论坛回复 / 浏览 (0 / 2623)
- 查看更多
相关推荐
在编程语言中,变量是存储数据的基本单位,不同的变量类型有着特定的作用范围和用途。本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、...
### Ruby语言教程:深入解析Ruby变量类型 #### 一、引言 在编程语言中,变量扮演着极其重要的角色,它们用于存储数据并在程序运行过程中对其进行操作。Ruby 作为一种动态类型的脚本语言,提供了多种变量类型,使得...
在 Ruby 中,变量是用来存储数据的标识符。Ruby 支持多种类型的变量,它们根据不同的作用域和用途有着明确的区别: 1. **变量 (Variable)**:一般由小写字母或下划线开头。 2. **全局变量 (Global variable)**:以 ...
Ruby-dotenv是一个非常有用的Ruby gem,它允许开发者从一个名为`.env`的文件中加载环境变量,以便在开发环境中管理应用程序的配置。这个工具对于保持敏感信息的安全,如API密钥、数据库凭证或其他不应直接存放在代码...
在Ruby中,变量用于存储数据,并在程序的不同位置使用。Ruby有五种不同类型的变量: - **局部变量**(Local Variables):以小写字母或下划线开头,如`x = 10`。 - **实例变量**(Instance Variables):以`@`...
在Ruby编程语言中,类变量和实例变量都是用来存储数据的重要机制。它们虽然都是变量,但在用途、作用范围、生命周期等方面有着明显的区别。接下来,我们将详细介绍这两者之间的四点不同之处,并提供具体的代码示例。...
- **使用线程局部变量**:线程局部变量只在创建它们的线程中可见,可用于存储线程特有的数据,从而避免线程安全问题。 - **资源池**:资源池是一种管理有限资源的有效方式,可以避免频繁创建和销毁资源所带来的开销...
为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2.tar.gz`、`redis-6.0.9.tar.gz` 和 `rubygems-3.1.5.tgz`。接下来,我们将详细...
1. **基础语法**:Ruby的基础语法包括变量(本地变量、实例变量、类变量和全局变量)、常量、运算符、流程控制(条件语句、循环语句)以及函数定义。 2. **类与对象**:Ruby是面向对象的语言,所有一切都是对象。...
Ruby还支持闭包,这是一种强大的工具,可以捕获和存储当前环境的变量,这在函数式编程中尤其有用。 "不墨迹,大量练习"是该教程的一大特点。学习编程不仅仅是理论知识的积累,更重要的是动手实践。书中的每个小节...
尽管Ruby的市场份额可能不如其他语言如Java或Python那么大,但其在Web开发领域,尤其是敏捷开发和快速原型构建中仍然具有显著优势,对于追求高效开发和代码质量的团队来说,Ruby不失为一个优秀的选择。
- **变量**:Ruby中的变量无需声明类型,直接赋值即可使用。例如:`name = "John Doe"`。 - **数据类型**: - 字符串(String) - 数组(Array) - 哈希(Hash) - 数字(Numeric) - 布尔值(Boolean) #### ...
2. **动态性**:Ruby是一种动态类型语言,变量的类型是在运行时决定的,不需要提前声明。此外,它还支持动态绑定和方法的动态调用,这赋予了代码高度的灵活性。 3. **块、 Proc 和 Lambda**:Ruby中的块是一段可以...
Ruby 插件是 Ruby 编程语言中的一个重要组成部分,它们扩展了 Ruby 的功能,使得开发者可以轻松地在项目中添加特定的工具、框架或者库。Ruby 社区有着丰富的插件资源,涵盖从Web开发、数据库操作到测试、调试等各个...
3. **变量**:Ruby的变量可以在运行时被重新定义。全局变量、实例变量和类变量都可以动态改变,这使得代码可以根据不同的条件改变其行为。 4. **对象**:Ruby中的所有对象都有`class`方法,可以查看或改变其类。...
在Ruby中,变量是存储信息的容器。Ruby是一种弱类型语言,不需要在声明变量时指定变量的数据类型,Ruby解释器会根据赋值自动判断。变量名由字母、数字、下划线组成,但不能以数字开头,并且必须以小写字母或下划线...
在Ruby中,有五种主要的变量类型,每种都有其特定的作用域和用途。 1. 变量(Variable):通常以小写字母或下划线开头。它们在局部作用域内有效,即只在其定义的代码块内部可访问。例如: ```ruby x = 10 ``` 这里...
3. **块(Blocks)和 Proc**:Ruby中的块是代码段,可以通过do..end或花括号{}来定义,Proc是块的可存储形式。书中会介绍如何使用块和Proc进行函数式编程。 4. **闭包和Lambda**:Ruby的Proc和Lambda可以实现闭包,...
Ruby API 帮助文档是开发者们在使用Ruby编程语言进行软件开发时的重要参考资料。它详细阐述了Ruby的标准库、类、方法以及其他关键组件的工作原理和使用方式,为程序员提供了全面且深入的理解,以提高开发效率和代码...