【问题标题】:Different behavior of strings and symbols?字符串和符号的不同行为?
【发布时间】:2014-07-30 22:18:20
【问题描述】:

我最近从koans 学习 ruby​​,我注意到关于符号和字符串对象的一件事。当我为两个不同的变量分配相同的符号时,我发现 object_id 是相同的。

2.1.1 :017 > symbol1 = :a
 => :a 
2.1.1 :018 > symbol2 = :a
 => :a 
2.1.1 :019 > symbol1.object_id
 => 361768 
2.1.1 :020 > symbol2.object_id
 => 361768 

现在看到这个,我认为它也应该是真正的字符串和整数。但是当我对字符串做同样的事情时,对象 id 最终会有所不同。

2.1.1 :021 > string1 = "test"
 => "test" 
2.1.1 :022 > string2 = "test"
 => "test" 
2.1.1 :023 > string1.object_id
 => 13977640 
2.1.1 :024 > string2.object_id
 => 13932280 

为什么符号和字符串的行为不同?

【问题讨论】:

标签: ruby


【解决方案1】:

您可以将符号视为自引用的内部字符串 - 也就是说,给定符号的一个副本将永远存在。这也适用于某些对象,例如 Fixnum 实例、布尔值或 nil。它们不是垃圾收集器,不是可复制的,也不是可变的。

另一方面,字符串是垃圾回收的,是可复制的,并且是可变的。每次声明一个字符串时,都会分配一个新对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多