`
CharlesCui
  • 浏览: 432863 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Ruby类中self的作用域

阅读更多
现有如下类Test,请注意类方法talk02和类方法talk03
class Test
  def self.talk01
    puts "kaishi"
  end
  def self.talk02
    self.talk01
  end
  def self.talk03
    talk01
  end
end

下面分别调用类方法talk02和类方法talk03
puts "TestAPIToken.talk02:"
TestAPIToken.talk02
puts "TestAPIToken.talk03:"
TestAPIToken.talk03

问题:
为什么类方法02和03中调用self.talk01和talk01这两种调用方式的结果相同?我本来担心调用talk03的时候会报错,说找不到talk01这个方法,调用talk03的时候,各个上下文都是怎样的?
分享到:
评论
5 楼 sina2009 2008-11-16  
哥位,你最好翻一下programming ruby 2th 里的第 24章(类与对象)

相信你就不会问这些问题了
4 楼 hideto 2008-11-14  
1,在类的实例对象中,self表示实例对象
2,在类对象中,self表示类对象
3 楼 fnet 2008-11-14  
我的笔记:
1. 在方法内使用
   在实例方法中使用,self就代表当前实例对象
   在类方法中使用,self就代表类对象。类对象只能调用类方法
2. 声明
   self可以声明类方法
2 楼 xrouterx 2008-11-13  
如果没有指定receiver,self是隐含指定的
1 楼 rainux 2008-11-11  
类方法里的上下文就是类的上下文,self 代表的是类本身,与实例无关,所以 talk02 和 talk03 里调用的都是类方法 talk01。

相关推荐

    Ruby - Ruby for Rails

    - **作用域规则**:深入理解 Ruby 中的作用域规则,包括局部作用域、类作用域等。 - **块与闭包**:介绍块的概念及其与闭包的区别,以及如何在 Ruby 中使用它们。 #### 2.5 控制流技术 - **条件语句**:讲解 if、...

    ruby中文教程(源代码)

    它们各自有不同的命名规则和作用域。 - 数据类型:Ruby是动态类型语言,主要数据类型包括字符串(`String`)、整数(`Integer`)、浮点数(`Float`)、布尔值(`TrueClass`和`FalseClass`)、数组(`Array`)、哈希...

    Ruby语言中文教程

    闭包是指能够访问其定义时作用域的代码块,即使在定义它的上下文之外也能保持对变量的访问。Ruby的块、Proc和Lambda都是闭包的实现形式。 八、元编程 Ruby的元编程能力强大,允许在运行时修改类和对象。`class << ...

    ruby trap 初学者使用

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

    动态加载的艺术:Ruby中require与load的区别

    - **局部作用域**:通过 `load` 加载的文件将在调用它的局部作用域中执行,这有助于保持作用域的一致性。 - **指定路径**:必须提供文件的完整路径或相对路径。 #### `require` 与 `load` 的核心区别 虽然 `...

    Ruby for Rails

    - `self`关键字在Ruby中表示当前对象或类的上下文。 - 作用域决定了变量的可见性,局部变量只能在其定义的作用域内访问。 4. **控制流技术** - 控制流是指程序执行的顺序。 - Ruby提供了丰富的控制流语句,如if...

    ruby初学者教程(对初学者很有帮助)

    - **局部变量**:以小写字母或下划线开头的变量,作用域限于当前块。 - **实例变量**:以`@`开头的变量,属于特定对象,可以在该对象的任何方法中访问。 - **类变量**:以`@@`开头的变量,属于整个类,可以在该类的...

    ruby-main.zip

    9. **闭包**:Ruby中的Blocks、Procs和Lambdas都具有闭包特性,能捕获其定义时的作用域内的变量,即使在定义后变量已改变或销毁。 10. **Ruby版本管理**:为了方便在不同版本的Ruby之间切换,有工具如RVM(Ruby ...

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

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

    Ruby常见面试题.pdf

    变量名区分大小写,并且以特定字符开头来表示其作用域: - **局部变量**:以小写字母或下划线开头。 - **实例变量**:以`@`开头。 - **类变量**:以`@@`开头。 - **全局变量**:以`$`开头。 **示例**: ```ruby # ...

    ruby语言

    7. **闭包**:Ruby的块(block)和Proc、Lambda都是闭包,它们可以记住定义时的作用域,即使在其他地方调用也能访问到这些变量。 8. **动态性**:Ruby允许在运行时修改类和对象,比如动态添加方法、属性或者改变类...

    Understanding Ruby's Object Model

    常量以大写字母开头,一旦被赋值,其值在整个作用域内是不可变的。然而,常量的引用路径可能改变,导致意外的结果,这是需要注意的地方。 10. **闭包(Closures)与块(Blocks)** Ruby的块是代码的匿名函数,它...

    ruby源代码7

    5. **闭包(Closure)**:Ruby的块和Proc具有闭包特性,即它们能记住定义时的作用域,即使在其他地方调用也能访问到。 6. **元编程**:Ruby的元编程能力强大,允许在运行时修改类和对象。`class<<self`用于打开当前...

    RUBY基础入门指南

    - **局部变量**:作用域仅限于定义它们的方法或代码块。 - **实例变量**:以`@`开头,属于特定对象。 - **类变量**:以`@@`开头,属于类的所有实例。 - **全局变量**:以`$`开头,在整个程序中可用。 - **常量**:以...

    ruby 程序设计

    - **局部变量**:作用域仅限于定义它的方法内部。 - **实例变量**:以`@`开头的变量,可以在对象的所有方法之间共享。 - **类变量**:以`@@`开头的变量,可以在类的所有实例之间共享。 - **全局变量**:以`$`开头的...

    Ruby程序设计(简洁清新的教程)

    - **局部变量**:作用域限制在定义它的方法内部。 - **实例变量**:以`@`开头,作用于整个类的所有实例。 - **类变量**:以`@@`开头,作用于整个类的所有实例及子类。 - **全局变量**:以`$`开头,可在程序的任何...

    Ruby最简单的初级教程

    3. 闭包:Ruby的块具有闭包特性,能记住其定义时的作用域,即使在其他地方调用也能访问到。 五、Gem与Ruby生态系统 Ruby的库通常以Gem的形式存在,通过`gem install`命令安装。RubyGems是管理这些Gem的工具,它提供...

    ruby基础知识

    - **类变量**:作用域为整个类及其所有子类。 - **全局变量**:以$开头,作用域为整个程序。 - **常量**:通常用大写字母表示,一旦定义后其值不能被改变。 #### 四、基本类型 - **Array**:数组,用于存储一系列...

Global site tag (gtag.js) - Google Analytics