如何理解Ruby中的符号?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

在使用符号时,我对内存中数据的表示感到困惑。如果一个符号(包含在不同对象中的两个符号)存在于同一个内存位置,那么它们是如何包含不同的值的呢?我曾预计相同的内存位置包含相同的值。

我不明白它是如何区分同一存储位置中包含的值的。

考虑这个例子:

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"

提问于
用户回答回答于

考虑到这一点:

x = :sym
y = :sym
(x.__id__ == y.__id__ ) && ( :sym.__id__ == x.__id__) # => true

x = "string"
y = "string"
(x.__id__ == y.__id__ ) || ( "string".__id__ == x.__id__) # => false

因此,创建一个符号对象,只要它的内容是相同的,它就会在内存中引用同一个对象。这不是问题,因为符号是不变对象...。字符串是可变的。

用户回答回答于

当我想到这样的事情时,我能够发现符号。Ruby字符串是一个具有一堆方法和属性的对象。人们喜欢使用字符串作为键,而当字符串用于键时,则不会使用所有这些额外的方法。所以他们创造了符号,它是除去了所有功能的字符串对象,除了它是一个好钥匙所需要的。

只要将符号看作常量字符串即可。

扫码关注云+社区