2

根据tryruby.org,符号的使用使用一个内存分配,然后指向它的单个分配,而存储多个字符串,即使它们相同,也会在内存中存储多个实例。因此,就像 MP3 和其他压缩或优化方法的工作原理一样,从多个字符串切换到重构再到使用符号以利用重复的优势,需要考虑哪些因素?只要你有两个重复?只有当您注意到性能下降时?对数计算?其他考虑或观点?

我是一名有兴趣学习强大的积极约定实践的程序员,这就是我问的原因。

4

2 回答 2

2

符号基本上是一个不可变的内部字符串。这意味着,它不能就地更改(例如通过使用gsub!),并且可以保证相同符号的两次使用总是返回相同的对象:

"foo".object_id == "foo".object_id
# => false

:foo.object_id == :foo.object_id
# => true

由于该保证,符号永远不会被垃圾收集。一旦您“创建”了一个符号,它将永远保留在当前进程中。

通常,当您拥有静态字符串或至少数量有限的静态字符串时,您应该使用符号,例如散列中的键或引用方法。在此处使用符号可确保您始终获得相同的对象。

对于普通字符串,根据您比较它们的方式,您可能会得到不同的对象。对于普通字符串,可能有两个或多个看起来相同但实际上不相同的字符串(参见上面的示例)。

于 2012-11-26T13:15:00.707 回答
2
  • 当程序的输入或输出需要时,请使用字符串。
  • 当它仅在程序内部使用,并且属于一个相对较小的封闭集合,例如标志,则使用符号。
于 2012-11-26T13:30:19.310 回答