学习用class << Object 这种方式定义类方法的时候,发现Ruby语法的绕口令,很好玩的.
class Kitty
class << self
puts "#{self.inspect} -- #{self.object_id}" #a点
def hello
puts "#{self.inspect} -- #{self.object_id}" #b点
puts "#{Kitty.inspect} -- #{Kitty.object_id}" #c点
end
end
end
Kitty.hello
为什么答案b点与c点打印出来的结果是相同的,而a点又不同?
为了解题理清思路,我给出的代码如下.
class Hello
puts "#{self.inspect} -- #{self.object_id}" #1处
puts "#{Hello.inspect} -- #{Hello.object_id}" #2处
def kitty
puts "#{self.inspect} -- #{self.object_id}" #3处
end
end
Hello.new.kitty
1处和2处结果相同,3处不同.
通过第二段代码来解释第一段代码.
a点的self指向名为Kitty的实例所属的类的类实例
b,c的self的指向的名为Kitty的实例
简单点来说,Kitty是一个实例名,可以通过class << Kitty 这种语法打开这个实例的Class
够绕吧...
分享到:
相关推荐
Ruby是一种动态类型的编程语言,以其简洁的语法和强大的功能而受到开发者喜爱。下面是对Ruby语法的详细解析: 1. 变量与常量 - 局部变量:以小写字母或下划线开头,如`var`或`_var`。 - 全局变量:以美元符号`$`...
Ruby是一种面向对象的脚本语言,它以其简洁、优雅的语法和强大的元编程能力而闻名。在Ruby中,一切皆为对象,这使得它在处理复杂逻辑时具有很高的灵活性。这篇博文链接()可能详细解释了Ruby的基本语法和特性,但...
- **Ruby on Rails**:一个基于 Ruby 的 MVC(模型-视图-控制器)架构的 Web 开发框架,极大地简化了 Web 应用的开发过程。 - **动态特性**:Ruby 支持动态类型和动态绑定,这使得其在运行时能够灵活地改变行为。 - ...
### Ruby语言教程对Ruby语法的总结 #### 一、变量与数据类型 **特点:** - **动态类型:** Ruby是一种动态类型的语言,这意味着你无需为变量声明具体的数据类型。 - **变量命名规则:** 变量名必须以小写字母或...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本教程将深入探讨Ruby的基础语法,并介绍如何下载、安装Ruby,以及使用Ruby教程中文版进行学习。 首先,让我们从Ruby的...
Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称。这个"Ruby基础语法视频教程1"涵盖了几个关键的概念,包括变量、变量规则以及表达式。以下是对这些主题的详细解释: 1. 变量(Variables): 在Ruby中,...
Ruby是一种面向对象、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。在《Prorammer Ruby》一书中,作者深入浅出地介绍了Ruby的基础和高级概念,帮助开发者掌握这一强大工具。以下是一些从书中...
另外,Ruby 还提供了一个更高级的打印工具 `pp`,它可以以易于阅读的格式输出复杂的数据结构。 - **注释**:单行注释以 `#` 开头;多行注释则使用 `=begin` 和 `=end` 包围。 - **条件语句**:Ruby 的条件语句与...
- fxri是Ruby的一个文档查看工具,用于查阅Ruby标准库和第三方库的文档。 **2.3 Ruby-irb** - irb是Ruby的交互式解释器,可以在其中直接执行Ruby代码,非常适合调试和测试小段代码。 **2.4 Ruby-ri** - ri是Ruby...
- **标准库**:Ruby 配备了一个丰富的标准库,提供了一系列功能强大的模块和类,涵盖了网络通信、文件处理、正则表达式等多种领域。 #### 三、Ruby 语言环境与安装 - **跨平台**:Ruby 可以在多种操作系统上运行,...
例如,当你在Ruby中写下"hello",它实际上是一个String对象,你可以调用方法在它上面操作,如`"hello".upcase`会返回"HELLO"。 其次,Ruby的动态性允许你在运行时改变程序的行为。这意味着你可以自由地添加方法到类...