何时将字符串用法重构为Ruby中的Symbol

时间:2012-11-26 13:01:23

标签: ruby

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

我是程序员,有兴趣学习强烈的积极会议实践,这就是我要问的原因。

2 个答案:

答案 0 :(得分:2)

符号基本上是一个不可变的实习字符串。这意味着,它不能在适当的位置更改(例如,通过使用gsub!),并保证相同符号的两个用法始终返回相同的对象:

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

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

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

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

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

答案 1 :(得分:2)

  • 当程序的输入或输出需要时,请使用字符串。
  • 当它仅在程序内部使用时,属于一个相对较小的封闭集,如flags,则使用符号。