尽管阅读了“了解Ruby符号”,但在使用符号时,我仍然对内存中数据的表示感到困惑。如果一个符号(其中两个包含在不同的对象中)存在于相同的存储位置,那么它们包含不同的值又如何呢?我期望相同的内存位置包含相同的值。
引用来自链接:
与字符串不同,同名符号被初始化,并且在一次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"
?
忘记哈希值一秒钟,我认为符号是指向值的指针。我的问题是:
- 我可以给符号赋值吗?
- 符号只是指向变量中包含值的指针吗?
- 如果符号是全局符号,是否意味着符号总是指向一件事?
puts patient1[:ruby]
,它将打印“红色”,如果您说puts patient2[:ruby]
,它将打印“正在编程”。