尽管读了"Understanding Ruby Symbols",但在使用符号时,我仍然对内存中数据的表示感到困惑.如果一个符号(其中两个包含在不同的对象中)存在于同一个内存位置,那么它们如何包含different个值?我希望相同的内存位置包含相同的值.
这是链接中的一段引用:
与字符串不同,相同名称的符号在ruby会话期间只在内存中存在一次
我不明白它是如何区分同一内存位置中包含的值的.
考虑这个例子:
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
patient1
和patient2
都是散列,没关系.然而,:ruby
是一个符号.如果我们要输出以下内容:
patient1.each_key {|key| puts key.to_s}
那么输出是什么呢?"red"
还是"programming"
?
暂时忘记散列,我认为一个符号是一个pointer比一个值.我的问题是:
- 我可以给符号赋值吗?
- 一个符号只是一个指针,指向一个有值的变量吗?
- 如果符号是全球性的,这是否意味着符号总是指向一件事?