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