rails symbol 疯狂的冒号

先打断一下Rails,说说Ruby语言里的一个特色--由冒号(:)作前缀组成的字符串,例如:id,:first等等。Ruby把它们称之为symbol(直译为“符号”,似乎不妥)。

可以先把symbol看作是一个字符串的变量名,创建一个symbol,

:’I love Rails very much!’

这个变量名的值是什么呢?

puts  :’I love Rails very much!’

结果是

I love Rails very much!

何必要多此一举呢?普通的变量不够用吗?

s=’I love Rails very much!’

puts s

结果也是

I love Rails very much!

symbol的不同之处在于你不能对symbol赋值!而且在运行环境中symbol的值也不会改变。因为在Ruby里,任何东西都是对象,所以即使你引用一个简简单单的字符串变量,Ruby也要先克隆这个对象,然后才能使用这个变量。

这种机制对于Rails来说是个恶梦。就拿博客来说吧,点击标题的链接(http://my.example.com/blog/show/1)显示相应的博客文章,Rails至少要引用id这个变量,才能为每个标题添加正确的链接。一个页面下来,id就要被引用十次八次,内存的消耗量不可小觑,更何况页面还有包含其他的动态元素。

symbol是个绝好的解决方案。因为symbol不会被破坏,可以放心直接使用,无需再克隆,不论你要引用多少次,只占用第一次使用所需的内存。每一个symbol还分配到一个互不相同的整数,不论你在哪个角落引用,Ruby都能通过这个整数快速定位symbol。

puts :’I love Rails very much!’.to_i 得到symbol的整数值。

Rails利用symbol提高运行效率的同时,还有一个显著的优势就是:

读Rails代码,就像在读英语句子,太流畅了,太容易理解了(如果你喜欢英语的话)。

你可能感兴趣的:(Ruby,&,Rails,rails,ruby,语言)