- 对象
- 类
- 变量
- 常量
4.1 对象
在 Ruby 中,表现数据的基本单位称为对象(object)。
数值对象
1、-10、3.1415 等是表示数字的对象,另外还有表示矩阵、复数、素数、公式的对象。
字符串对象
“你好”、”hello” 等表示文字的对象。
数组对象、散列对象
表示多个数据的集合的对象。
正则表达式对象
表示匹配模式的对象。
时间对象
比如 ”2013年5月30日早上9点“ 等表示时间的对象。
文件对象
一般我们可以理解为表示文件本身的对象,但确切来说,它是对文件进行读写操作的对象。
符号对象
表示用于识别方法等名称的标签的对象。
除此之外, Ruby 还有范围对象(Range)、异常对象(Exception)等。
4.2 类
Ruby 的类(class)表示的就是对象的种类。
对象拥有什么特性,这些都是由类来决定的。
下图是刚刚介绍过的对象及其所属类的对应关系(这些都是 Ruby 默认提供的):
「 XX 类的对象 」,我们一般会说成 「 XX 类的实例(Instance) 」。
例如,我们会说 「 字符串对象 foo
是 String 类的实例 」。
4.3 变量
变量就像是对象的名片。
Ruby 中有四种类型的变量。
- 局部变量(local variable)
- 全局变量(global variable)
- 实例变量(instance variable)
- 类变量(class variable)
变量的命名方式决定了变量的种类。
- 局部变量
以英文字母或者_开头 - 全局变量
以$开头 - 实例变量
以@开头 - 类变量
以@@开头
除以上四种类型外,还有名为伪变量(还有一种叫预定义变量,书中没有详细介绍)的特殊变量。
伪变量是 Ruby 预先定义好的代表某特定值的特殊变量,因此即使我们在程序里给伪变量赋值,它的值也不会改变。Ruby中,nil、true、false、self等都是伪变量。它们表面上虽然看着像变量,但实际的行为又与变量有差别,因此称为伪变量。
局部变量与全局变量
局部变量是指 变量在程序中的有效范围(也称变量的作用域)是局部的。
全局变量,不管变量在程序的哪个部分使用,程序就认为它们是同一个变量。
局部变量作用范围只在自己所在的代码块中。全局变量作用范围在所有程序中。
一般并不推荐使用全局变量。全局变量在程序的任何地方都可以修改,因此在规模较大的程序中使用时,会增加程序不必要的复杂度,给阅读程序、修改程序造成意想不到的麻烦。
首次给局部变量赋值的同时,该局部变量就被初始化了。如果引用了未初始化的局部变量,会抛出异常。
执行示例:
实例变量与类变量,第8章会详细说明。
4.4 常量
常量的作用和变量一样,是某个对象的 「 名片 」。与变量不同的是,对已经赋值的常量再进行赋值时,Ruby 会做出警告。
执行示例:
常量以大写英文字母开头。
例如 Ruby 的运行版本「 RUBY_VERSION 」、运行平台「 RUBY_PLATFORM 」、命令行参数数组「 RARGV 」等,都是 Ruby 预定义好的常量。
4.5 保留字
Ruby 关键字一览表:
这些关键字被称为保留字,如果用做变量名,Ruby 会提示我们语法错误。
执行示例:
4.6 多重赋值
除了「 变量 = 值 」这种给变量赋值的方法,Ruby 中还提供了只用一个表达式就能给多个变量赋值的简便方法。
4.6.1
比如:
|
|
如果一组不相关的变量进行多重赋值,程序会变的难懂,因此建议对彼此相关变量进行多重赋值。
即使 = 号左右两边列出的数量不相等,Ruby 也不会报错。
|
|
变量部分比较少时,Ruby 会忽略掉该值,不会分配多余的值。
|
|
变量前加上 * ,表示 Ruby 会将未分配的值封装为数组赋值给该变量
|
|
4.6.2 置换变量的值
|
|
使用多重赋值,只需一行程序就搞定了。
|
|
4.6.3 获取数组的元素
用数组赋值,左边有多个变量时,Ruby 会自动获取数组的元素进行多重赋值。
|
|
4.6.4 获取嵌套数组的元素
|
|
|
|
只要等号左边的变量的结构与数组的结构一致,即使再复杂的结构,多重赋值都可以轻松对应。
专栏
以变量名开头来决定变量的种类,这是 Ruby 中对变量命名时唯一要坚决遵守的规则。
◎ 不要过多使用省略的名称
◎ 对于多个单词组合的变量名,使用 _ 隔开各个单词,或者单词以大写字母开头
Ruby 的变量名和方法名使用前者,类名和模块名使用后者。