`

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

    博客分类:
  • Ruby
阅读更多

在ruby代码中,变量拥有自己的可视区域,也就是变量的作用域,我们可以把ruby的程序看作是一种类目录结构,根据嵌套的层次,一层层的深入到子目录,子子目录。。。可以认为,模块,类,方法都是目录

例如我们举一个类作为例子:

ruby 代码
  1. class A #可以将它看作顶级目录,例如linux下的'/'   
  2.   Const_var = "const variable" #它可以想像成位于'/'目录下的一个文件   
  3.   var = "var in '/'"
  4.   def print_var
  5.     puts Const_var #'/'目录下的一个子文件夹
  6.   end
  7.   class SubClass #'/'目录下的一个子文件夹   
  8.      Const_var_another = "another const variable"  #'/SubClass/'这个目录下的一个文件   
  9.      var = "var in '/SubClass'" #'/SubClass/'这个目录下的另一个文件   
  10.   end  
  11. end  

对于普通的局部变量(小写字母或者下划线开头的变量)就像在文件系统中一样,某一个文件的可见作用域仅仅在本文件夹中,其他文件夹包括此文件夹的子文件夹中,这个文件都是不可见的,任何对于此文件(变量)的操作都必须在此文件的可见域中进行

ruby 代码
  1. class A   
  2.   var = "ok"  
  3.   def print_var
  4.     puts var #报错,因为var不可见
  5.   end
  6.   class SubA   
  7.     puts var #报错,因为var不可见   
  8.   end  
  9. end  
  10.   
  11. class B   
  12.   puts var #报错,因为var在另外一个目录中同样不可见   
  13. end  

对于常量(大写字母开头的变量),有一些不同,常量对于常量所在文件夹中的子文件夹也是可见的

ruby 代码
  1. class A      
  2.   Const_var = "ok"   
  3.   def print_var
  4.     puts Const_var #正确,因为Const_var对于子目录可见
  5.   end
  6.   
  7.   class SubA      
  8.     puts Const_var #正确,因为Const_var对于子目录可见   
  9.   end     
  10. end     
  11.      
  12. class B      
  13.   puts var #报错,因为Const_var在另外一个目录中不可见      
  14. end   

而类的instance_variable,同常量类似,不同之处在于它的向子目录可视性仅仅对于方法有效,对于另外一个类无效:

ruby 代码
  1. class A         
  2.   @var = "ok"      
  3.   
  4.   def print_var   
  5.     puts @var #正确,因为@var对于子目录可见   
  6.   end  
  7.      
  8.   class SubA         
  9.     puts @ar #错误,因为此时已经在另外一个类中,类A的instance_variable是不可视的   
  10.   end        
  11. end        
  12.         
  13. class B         
  14.   puts @var #报错,因为@var在另外一个目录中不可见         
  15. end  

对于类变量(以@@开头的变量),可是域上同常量的效果完全一致,唯一的不同是常量可以通过目录结构来访问,例如类A中的常量Const可以通过A::Const来访问,而类变量不行。

分享到:
评论
3 楼 flingfox63 2012-11-22  
学习了,详细,赞个
2 楼 zhou6711411 2011-11-16  
不知是版本问题还是怎么的
class A         
  @var = "ok"      
  
  def print_var   
    puts @var #正确,因为@var对于子目录可见   
  end  

end

这段貌似行不通了。
1 楼 xanderzhang 2008-09-16  
哈哈 这样理解就容易些了 谢谢

相关推荐

    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 变量

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

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

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

    Ruby In a Nutshell

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

    ruby trap 初学者使用

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

    ruby 中文 教程 从入门到精通

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

    .一步一步学RUBY

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

    ruby_知识库pdf

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

    Programming-Ruby-1.9源代码

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

    Ruby从入门到精通pdf

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

    ruby for rails

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

    Ruby 语言基础(入门推荐)

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

Global site tag (gtag.js) - Google Analytics