首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

大家怎么理解ruby中的符号变量

2013-11-14 
大家如何理解ruby中的符号变量如题?请各抒己见,交流一下。[解决办法]symbol is symbol, like a tag, this t

大家如何理解ruby中的符号变量
如题?请各抒己见,交流一下。
[解决办法]
symbol is symbol, like a tag, this tag is a element, this element memory address is constant
symbol is like string, but there is some different.
like below:
:example
:example
"example"
"example"
they can convert each other, but if you check the object_id, you will find,
:example  #=>xxx
:example  #=>xxx
"example" #=>xxxxxy
"example" #=>xxxxxz
string object_id of two "example" is different
symbol object_id of two :example is same
some scenario like
you generate a hash like example_hash = {"ruby"=>"rails",....}
if you have many example_hash, you will find, Oops! you out memory.
so you need to use :ruby to instead of "ruby"
[解决办法]
这里有详细解释 http://www.ruby-doc.org/core/Symbol.html
[解决办法]

[17] pry(main)> :key.object_id
=> 100808
[18] pry(main)> :key.object_id
=> 100808
[19] pry(main)> 'key'.object_id
=> 34255720
[20] pry(main)> 'key'.object_id
=> 43597460


从上面可以看出,两次的 :key 其实是同一个对象,而 'key' 则是两个不同的对象。所以 Symbol 相较 String 而言,其实就是节省了内存。这也是 ruby 建议我们在 hash 的 key 中使用 Symbol 而不是 String 的原因
[解决办法]
符号就像数字一样,是不可变的,两个字面相等的符号,就是一个相同的对象。

热点排行