`

Ruby变量作用域的类目录结构(补)

    博客分类:
  • Ruby
阅读更多
ruby 代码
  1. class A   
  2.   Const = "ok"  
  3.   class B   
  4.     Const = "ko"  
  5.     p Const.object_id   
  6.   end  
  7.   p Const.object_id   
  8. end  

如果你在irb中敲入上面的程序,可以发现,两次的object_id是不同的,虽然我们在B中可以看到上层目录中定义的Const,而且可以打印出它的值,但是想要给C赋值就是另外一回事了,ruby并不会认为这是在给上层目录中的C赋值,而是认为这是在目录A::B中新建了一个常量C,因为常量是不允许多次赋值的,这样自然不难理解为什么两者的object_id不一样了。

让我们多做一点儿尝试:

ruby 代码
  1. class A   
  2.   Const = "ok"  
  3.   def meth   
  4.     Const = "ko"  
  5.   end  
  6. end  

当我们在方法中试图改变一个常量的值得时候,程序会报错,这是显然的结果,但是从这里可以看出来,虽然在变量的可视区域上方法和类没有什么区别,但是在对变量的操作时,两者的区别还是很明显的。

让我们再来点儿其他好玩儿的尝试:

ruby 代码
  1. class A   
  2.   Const = "ok"  
  3.   class B   
  4.     p A::Const   
  5.     Const = "ko"  
  6.     p Const.object_id   
  7.   end  
  8.   p Const.object_id   
  9. end  
  10.   
  11. class A   
  12.   Const = "ok"  
  13.   class B   
  14.     Const = "ko"  
  15.   end  
  16.   p A::B::Const.object_id   
  17.   p A::Const.object_id   
  18. end  

可以看到,我们可以通过命名空间(或者叫目录结构)来访问任意目录下定义的常量,当不指定目录结构的时候,首先从当前目录开始寻找,然后依次向上。

分享到:
评论

相关推荐

    Ruby语言教程:Ruby 变量示例

    - 这类变量的作用域取决于它被定义的位置。例如,在方法内部定义的变量仅在该方法内部可见。 - **示例代码**: ```ruby # 普通变量示例 name = "Ruby" puts name # 输出 "Ruby" ``` ##### 2. 全局变量 ...

    01Ruby 变量.docx

    Ruby 支持多种类型的变量,它们根据不同的作用域和用途有着明确的区别: 1. **变量 (Variable)**:一般由小写字母或下划线开头。 2. **全局变量 (Global variable)**:以 `$` 开头。 3. **实例变量 (Instance ...

    简要解读Ruby面向对象编程中的作用域

    Ruby中不具备嵌套作用域(即在内部作用域,可以看到外部作用域的)的特点,它的作用域是截然分开的,一旦进入一个新的作用域,原先的绑定会被替换为一组新的绑定。 程序会在三个地方关闭前一个作用域,同时打开一个新...

    Ruby中类变量和实例变量的比较

    ### Ruby中类变量和实例变量的比较 在Ruby编程语言中,类变量和实例变量都是用来存储数据的重要机制。它们虽然都是变量,但在用途、作用范围、生命周期等方面有着明显的区别。接下来,我们将详细介绍这两者之间的四...

    Ruby - Ruby for Rails

    - **变量作用域**:讲解变量的作用域规则,包括局部作用域、块作用域、类作用域等。 - **动态类型**:探讨 Ruby 的动态类型系统,了解如何根据运行时的数据类型进行操作。 #### 2.2 使用类组织对象 - **类定义**:...

    Ruby 基础语法 视频教程1

    - **全局变量**(Global Variables):以`$`开头,其作用域在整个程序中,如`$debug = true`。 - **常量**(Constants):以大写字母开头,表示不变的值,如`PI = 3.14`,但实际并非完全不可变。 2. 变量规则...

    ruby官方chm文档

    《ruby23-language.chm》文档深入讲解了Ruby语言的特性,如动态性、元编程、闭包和块、方法定义与调用、变量作用域等。Ruby允许在运行时修改代码,这使得元编程成为其强大之处。理解如何使用`eval`、`class_eval`和`...

    ruby语言帮助文档(简体中文)

    块可以与方法一起使用,形成闭包,这样就可以在方法中捕获并操作外部作用域的变量。 6. **元编程**:Ruby的元编程能力非常强大,允许在运行时修改和创建类和对象。这得益于Ruby的反射API和`send`方法,可以动态地...

    深入分析Ruby 变量

    在Ruby中,有五种主要的变量类型,每种都有其特定的作用域和用途。 1. 变量(Variable):通常以小写字母或下划线开头。它们在局部作用域内有效,即只在其定义的代码块内部可访问。例如: ```ruby x = 10 ``` 这里...

    ruby trap 初学者使用

    理解它们的作用域和用法是避免陷阱的关键。 - 常量在Ruby中是可变的,但改变常量值会引发警告,初学者应避免随意修改。 2. **符号(Symbol)**: - 符号是Ruby中的一种特殊数据类型,它们是不可变的,常用于哈希...

    Ruby In a Nutshell

    - 闭包是指能够访问其定义时作用域的变量的块,即使在块被调用时该作用域已不存在。 8. ** Proc和Lambda** - `Proc`和`lambda`都是Ruby的代码对象,可以存储和传递代码。 - `Proc`更灵活,允许在块末尾隐式返回...

    ruby 中文 教程 从入门到精通

    - **标识名和变量作用域**:Ruby中的变量根据作用域可分为局部变量、实例变量、类变量和全局变量。 - **数据类型**:Ruby支持多种内置的数据类型,如整型、浮点型、字符串、数组、哈希等。 - **赋值和条件运算符**:...

    .一步一步学RUBY

    变量分为局部变量、全局变量、实例变量和类变量,每种变量的作用域和生命周期不同,提供了灵活的数据封装和访问控制。 **常量**以大写字母开头,尽管Ruby允许对常量进行重新赋值,但这将触发警告,强调常量应保持...

    Programming-Ruby-1.9源代码

    - 变量:Ruby支持局部变量、实例变量、类变量和全局变量,源代码中会展示它们的用法和作用域。 - 数据类型:包括字符串、数字、布尔值、数组、哈希等,通过代码你可以看到它们的操作和转换方式。 - 控制结构:如...

    ruby_知识库pdf

    这篇“ruby_知识库pdf”很可能包含了关于Ruby语言的深入讲解,包括基础概念、核心特性、类与对象、模块、方法、块、 Proc 和 Lambda、变量作用域、控制结构、异常处理、标准库、Gem包管理以及可能的Rails框架等内容...

    Ruby从入门到精通pdf

    - 闭包:块可以捕获其定义时的作用域内的变量,形成闭包,这使得Ruby的回调函数和函数式编程特性得以实现。 4. **模块**: - 模块用来组织代码,提供命名空间,也可以作为混入机制,实现代码复用。 - include...

    Ruby 语言基础(入门推荐)

    闭包是能够访问其定义时作用域的变量的函数,即使该作用域在函数调用时已不再存在。 4. **元编程**:Ruby提供了强大的元编程能力,允许在运行时修改或创建类和方法,这极大地增强了代码的灵活性。 5. **模块**:...

    ruby for rails

    4. **The default object (self) and scope**:Ruby中的`self`关键字,它如何指示方法调用的目标对象,以及作用域规则,包括局部作用域、实例作用域和类作用域。 5. **Control flow techniques**:控制流程的技巧,...

Global site tag (gtag.js) - Google Analytics