变量持有目标对象的引用,和我们所熟悉的 C# / Java 不同的是,Ruby 变量并没有内在类型。作为一种动态解析执行的语言,其变量类型只在其执行期决定,我们也因此能改变变量所持有对象的类型,显然在 C# / Java 里是不允许的 (Object 类型变量和这个不是一回事,如果不明白,建议再看看面向对象理论)。
a = 1
puts a.class #Fixnum
a = "s"
puts a.class #String
或许你看过 C# 3.0,但需要明白这和那个隐式类型变量(Implicitly typed local variables)并不是一回事。"var" 关键字只是一种简写,一种语法糖,编译器会自动推断,并在编译时决定其类型。细节可以参考我前面写的文章。
名字
这里提到的命名规则,仅仅是变量,有关类型、方法的命名参考后面的章节。
(1) 名字由一个大小写字母(a-z)或下划线(_)开头,后跟任意个命名字符(大小写字母、下划线或数字)组成。
(2) 局部变量通常由小写字母开头。
(3) 实例变量名以"@"开始,第一个命名字符小写。
(4) 类变量以 "@@" 开始,第一个命名字符大写。
(5) 全局变量以 "$" 开始。
(6) 常量名通常以大写字母和下划线组成。
关于 Ruby 命名前缀,感觉有点别扭。不过记忆的方法也很简单,根据其作用域,范围越大越有 "钱",自然全局变量是货真价实的 "$",然后是大家(对象实例)共有的"领导"——类变量,每月发两包子(@@);实例变量相比起来,只能是"白领"了,只有一个包子(@);最惨的就是局部变量了,什么都没有…… ~~~~~
$Global = "Word!"
class Class1
@@I = 0
def initialize()
@name = "Tom!"
end
def test()
a = 123456
puts a
end
end
常量
Ruby 允许你改变常量值,这对我而言恐怕不是啥好事情。
NAME = "name"
puts NAME
# Line 100, 许木木说: 做好多好多有意义的事情。
# Line ...
# Line 1000, 许木木说: 做好多好多有意义的事情。
NAME = "sss" # 我以为是重新定义了一个常量,其实不小心改了上面 "大哥" 的内容。
puts NAME
输出:
name
sss
main.rb:6: warning: already initialized constant NAME
输出结果里面的这个警告信息对于程序执行而言,并无任何约束作用。
作用域
在类或模块内的任意位置都可以访问此类或模块中定义的常量,在这之外,可以通过域作用符(::)访问。
示例1
NAME = "Tom"
class Class1
def test()
puts NAME
end
end
puts NAME
Class1.new().test()
示例2
class Class1
NAME = "Tom"
def test()
puts NAME
end
end
puts Class1::NAME
Class1.new().test()
全局变量贯穿整个程序,当我们 load 或 require 一个模块时,也会将其全局变量引入。因此,我们应该避免滥用全局变量,这可能和其他模块造成冲突。就个人感觉而言,我不太喜欢全局变量/常量这种东西,它更多地象很久以前结构化编程的遗迹。
test.rb
$name = "zhangsan"
def test()
puts $name
end
main.rb
require "test.rb"
$name = "lisi" # 原本以为创建了个新的家伙,却不小心 "改变" 了 "别人" 的 "财产"。
test()
类变量和 C# 类静态字段基本是一个东西,被所有实例对象共享。而实例变量仅属于当前实例,缺省情况下,在对象外部我们并不能访问它。
转自http://www.rainsts.net/article.asp?id=527
分享到:
相关推荐
从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、数值操作、条件语句、循环结构以及字符串处理等核心领域。 ### Ruby基础语法 #### 注释 Ruby提供了两种注释方式...
3. **变量(Variables)**:Ruby有四种类型的变量:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。理解它们的作用域和使用规则非常重要。 4. **控制...
类名在Ruby中必须以大写字母开始,象征着类名是常量。Ruby是一种基于行的语言,通常情况下,每遇到一个换行符就意味着一个语句的结束。Ruby的代码是从上到下依次执行的,且没有所谓的主程序。如果需要,可以通过引用...
"ruby笔记2ruby笔记2ruby笔记2"可能是指一系列关于Ruby学习的笔记,这些笔记可能涵盖了Ruby的基础概念、核心特性以及进阶话题。在Ruby的学习过程中,理解和掌握以下几个关键知识点至关重要: 1. **面向对象编程...
局部变量、方法参数和方法名通常以小写字母或下划线开头,全局变量以美元符号($), 实例变量以 (@),类变量以 (@@),类名、模块名和常量则以大写字母开头。实例变量只能在对象内部通过方法访问,体现了Ruby的强制封装...
作者也记录了自己学习的笔记,包括变量的命名、注释语句、常量的使用、数组的定义格式、基本类型的转化等。 知识点摘要 1. path用于操作系统查找命令的路径,其中`;`代表分割不同的路径。 2. Java_home在Windows下...
- 每个 Class 文件对应着唯一的一个类或接口的定义信息,但 Class 文件本身可以包含更多元的数据结构,例如常量池、字段和方法表等。 #### 总结 通过以上内容的学习,我们可以了解到 Java 虚拟机的核心在于其强大...
- **方法区**:存储类信息、常量、静态变量等数据。 #### 4. JVM 的抽象架构 JVM 设计为一个抽象的计算机模型,可以实现为软件或硬件。它的主要目标是在任何操作系统或硬件架构上都能运行 Java 字节码。JVM 的核心...
### 黑马程序员基础班精华笔记总汇 #### 计算机基础知识 - **计算机定义**:计算机是一种能够根据程序指令处理数据的电子设备。它由硬件和软件两大部分构成。 - **硬件**:包括中央处理器(CPU)、内存、硬盘、...
这个目录可能包含了一系列关于Ruby学习的笔记、代码示例、练习项目或其他资源。 详细知识点: 1. **面向对象编程**:Ruby是一种纯面向对象的语言,所有数据都是对象,每一个操作都可以看作是对对象的方法调用。 2...
在“note-main”笔记中,可能会介绍如何定义变量,如局部变量(`local_variable`)、实例变量(`@instance_variable`)和全局变量(`$global_variable`)。Ruby支持四种主要的数据类型:字符串(String)、整数...
【标题】RB101,通常在IT领域中,这可能是某个课程、教程或项目的代号,特别是当它与编程语言相关时。...通过这个课程,学习者将能够编写、理解和调试简单的Ruby程序,为进一步深入学习和实际开发奠定基础。
3. **函数与方法**:讲解如何定义和调用函数,理解参数传递,以及 Ruby 中的块(block)、Proc 和 Lambda 的使用。 4. **面向对象编程**:Ruby 是一种强面向对象的语言,所以会深入讲解类(class)、对象(object)...
3. **Playgrounds**:Swift提供了一个名为Playgrounds的工具,允许开发者实时测试代码,查看结果,这对于学习和调试非常有帮助。 4. **Type Inference**:Swift具有强大的类型推断能力,可以自动推断变量和常量的...