符号(Symbols)
Ruby 的许多新人都被符号(symbols)弄糊涂了。符号(symbol)是一个标识符,其首个字符为冒号(:),所以 :this
是一个符号,:that
也是。事实上,符号并不复杂 - 在某些情况下,它们可能非常有用,我们很快就会看到。
让我们首先明确一个符号不是什么:它不是一个字符串,它不是一个常量,它也不是一个变量。简单地说,符号是除了自己的名称之外没有内在含义的标识符。而你可能会这样为变量赋值…
name = "Fred"
你不能为符号赋值。名为 :name
的符号的值也为 :name
。
更多有关符号专门的说明,请参阅本章末尾的“深入探索”部分。
当然,我们之前使用过符号。例如,在第 2 章中,我们通过将符号传递给 attr_reader
和 attr_writer
方法来创建属性的读取器和修改器,如下所示:
attr_reader( :description )
attr_writer( :description )
你可能还记得上面的代码会使得 Ruby 创建一个 @description
实例变量以及一对名为 description
的 getter(reader)和 setter(writer)方法。Ruby 从字面量理解符号的值。它的值就是它的名字(:description
)。attr_reader
和 attr_writer
方法会创建名称与该名称相匹配的变量和方法。