符号(Symbols)

Ruby 的许多新人都被符号(symbols)弄糊涂了。符号(symbol)是一个标识符,其首个字符为冒号(:),所以 :this 是一个符号,:that 也是。事实上,符号并不复杂 - 在某些情况下,它们可能非常有用,我们很快就会看到。

让我们首先明确一个符号不是什么:它不是一个字符串,它不是一个常量,它也不是一个变量。简单地说,符号是除了自己的名称之外没有内在含义的标识符。而你可能会这样为变量赋值…

  1. name = "Fred"

你不能为符号赋值。名为 :name 的符号的值也为 :name

更多有关符号专门的说明,请参阅本章末尾的“深入探索”部分。

当然,我们之前使用过符号。例如,在第 2 章中,我们通过将符号传递给 attr_readerattr_writer 方法来创建属性的读取器和修改器,如下所示:

  1. attr_reader( :description )
  2. attr_writer( :description )

你可能还记得上面的代码会使得 Ruby 创建一个 @description 实例变量以及一对名为 description 的 getter(reader)和 setter(writer)方法。Ruby 从字面量理解符号的值。它的值就是它的名字(:description)。attr_readerattr_writer 方法会创建名称与该名称相匹配的变量和方法。