尽管阅读了" 理解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
Run Code Online (Sandbox Code Playgroud)
patient1
并且patient2
都是哈希,这很好. :ruby
然而是一个象征.如果我们要输出以下内容:
patient1.each_key {|key| puts key.to_s}
Run Code Online (Sandbox Code Playgroud)
然后将输出什么?"red"
,还是"programming"
?
忘记哈希一秒钟,我认为符号是一个指向值的指针.我的问题是:
我在各种网站上看到了这个答案:
如果对象的内容(字符序列)很重要,请使用字符串如果对象的标识很重要,请使用符号
但是,这究竟意味着什么?请给我一个解释,即使是外行也能理解.