根据tryruby.org,符号的使用使用一个内存分配,然后指向其单个分配,而存储多个字符串,即使它们相同,也会在内存中存储多个实例。那么,就像MP3和其他压缩或优化方法的工作方式一样,从多个字符串切换到重构到使用符号以利用重复,需要考虑哪些因素?一旦你有两个重复?只有当你注意到性能下降?对数计算?其他考虑因素或观点?
我是程序员,有兴趣学习强烈的积极会议实践,这就是我要问的原因。
答案 0 :(得分:2)
符号基本上是一个不可变的实习字符串。这意味着,它不能在适当的位置更改(例如,通过使用gsub!
),并保证相同符号的两个用法始终返回相同的对象:
"foo".object_id == "foo".object_id
# => false
:foo.object_id == :foo.object_id
# => true
由于这种保证,符号永远不会被垃圾收集。一旦你“创建”了一个符号,它将永远保存在当前进程中。
通常,您应该在拥有静态字符串时使用符号,或者使用至少有限数量的符号,例如哈希中的键或引用方法。在此处使用符号可确保您始终获得相同的对象。
使用普通字符串,根据您比较它们的方式,可能会返回不同的对象。对于普通字符串,可能有两个或更多看起来相同,但实际上不一样(参见上面的例子)。
答案 1 :(得分:2)