Symbol
在Ruby中,有一种奇怪的对象,在一个变量前加一个冒号“:”,这就是Ruby的Symbol,Symbol是Symbol类的 实例,Symbol形式上和字符串很像,但是两者却有区别,首先Symbol不是String类对象,String类的很多方法不能作用到Symbol上 面,然后一个显著的区别就是只要给定一个名字,就唯一确定了一个Symbol对象,而字符串即使是相同,也是不同的对象,怎么理解这句话,看下边的示例:
稍作解释:前三个:test或者:”test”是Symbol对象,其object_id都是86600,说明他们是同一个对象,内存中只存在一份;后三个是”test”字符串的对象,其object_id都互不相同,说明他们是三个不同的对象。
Symbol和字符串可以互相转换Symbol通过to_s方法转换成为字符串,字符串可以通过to_sym或者intern方法转换成为Symbol。
为什么要有Symbol呢?节约内存,相比String对象,Symbol占用内存较少,他存于Ruby的符号表中,并且不会出现多个的副本,可以用来做哈希表的关键字,也经常用作类中可读可写的属性(例如:attr_accessor :user)。