1、不变性
符号是不可变的。符号是不可变的,一旦存在就不能修改。
2、符号是惟一的,无论何时看到:abc,看到的都是同一个对象。再说一次,相比字符串而言,符号更像是整型。当看到"abc"在两个地方出现,它们表述的是两个对象,因为字面构造器" "创建了新字符串。但是:abc总是表示相同的对象,如同100总是表示相同的对象一样。
通过查询用于表示每个独立对象的唯一性的object_id,就可以发现字符串和符号在唯一性上的不同。
>>"abc".object_id
=>2707250
>>"abc".onject_id
=>2704780
>>:abc.object_id
=>160488
>>:abc.object.id
=>160488
因为符号是惟一的,所以他没有构造器,ruby也没有提供symbol#new方法。用户创建一个符号所做的事情并没有比创建一个新的整型复杂。在任何情况下,都只能是引用他而已。
09-20
2840