变量

所谓变量,就是某些数值附上名称。是相对于常量的数据类型。

变量的命名

变量命名的管理。我们可以为变量取比如 x 和 y 或者更长的 像 level 或 gold 这样的名称。名称的长度没有限制。

变量有几个类型,首先我们来学习最基本的局部变量。 局部变量的命名规则有以下几点。其中的第 1 条应该特别注意。

  1. 第一个字符必须以小写英文字母或 _(下划线)开头。
  2. 第二个字符开始可以使用英文字母、数字或 _(下划线)。
  3. 不能使用保留字作变量的名称。

保留字是作为 Ruby 中具有特殊意义的词而被系统所「保留」, 所以变量名称不能使用。以下就是系统的保留字。

alias    def      false    nil      return   unless
and      do       for      not      self     until
begin    else     if       or       super    when
break    elsif    in       redo     then     while
case     end      module   rescue   true     yield
class    ensure   next     retry    undef

除上面列出的保留字以外,其它的词基本都可以作变量的名称。

正确:

foo
tkool2000
_test

错误:

2003tkool   # 以数字开头
Alex        # 以大写字母开头
def         # 使用了保留字

赋值和引用

在实际中使用变量看看吧。

x = 3
y = 4
p x + y     # => 7

第一行和第二行是进行变量的赋值。 其中 = 号是赋值运算符。和数学上使用等号 表示「左边等于右边」的意思不同,这里表示「左边的变量代入 右边的数值」。在上述示例中,第一行 x 变量和第二行 y 变量 分别代入数值 3 和 4。

第三行是引用变量 x 和 y。所谓引用就是 取得那个变量的数值。变量的计算和数字的计算方法完全一样。 这里的 x + y 可以解释为 3 + 4,计算结果就为 7。

另外,引用从未进行赋值的局部变量,就会使程序出现错误。

p zzz       # ERROR!!

请记住,变量一定要进行赋值后才能使用。

zzz = 5
p zzz       # => 5

这个示例中,第一行变量 zzz 为其赋值代入 5 后,第二行引用。

自运算

变量引用自己的数值,并再次代入计算结果称为自运算

x = 1
x += 7
x -= 3
x *= 2
p x         # => 10

第二行的 x += 7 相当于 x = x + 7,总之就是向变量 x 里加上 7。 同样 -=、*=、/=、%= 等也是如此使用。这些运算符就是自运算运算符

RM 的变量进行自运算计算处理时思考方法都相似。 这个示例中第一行是赋值直接代入 1,第二行加上 7,这时 x 的值其实是 8, 第三行减去 3,第四行再乘以 2,最后的计算结果就是 10。

全局变量

局部变量是暂时使用的变量,只能在函数和类等定义(在后面讲述)内部使用, 之外变量就无效。与之相对,在程序任何地方都能引用的就是全局变量。 全局变量可以在程序中任何地方使用,名称相同,就必然是同一个变量。

如下面的示例,以 $ 号开头的变量就作为全局变量使用。赋值方法和局部变量完全相同。

$global

虽然在任何地方都能引用,但使用全局变量不一定比局部变量好。 全局变量十分强大,胡乱使用恐怕会使程序变得很难懂。请在使用时注意。

nil

使用全局变量时,与局部变量不同,使用没有赋值过的变量并不会跳出错误。

p $global   # => nil

nil 表示「什么都没有」。这是在其他各种情况中都会使用的重要的值,请务必记住。