ruby - 何时将字符串用法重构为 Ruby 中的符号

标签 ruby

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

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

最佳答案

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

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

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

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

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

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

关于ruby - 何时将字符串用法重构为 Ruby 中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565394/

相关文章:

ruby - 如何在 Ruby 中将一个 block 和一个初始参数传递给每个 block ?

ruby-on-rails - 检查哪个 Rails 版本时出错

ruby - 使用 mongomapper 时使用 "or"语句

ruby-on-rails - Ruby 1.8 和 UTF-8 字符串大小写语句比较

Ruby/Selenium WebDriver XPath 优缺点

ruby - 如何运行 Ruby Gem?

ruby-on-rails - 仅使用 Journey 进行 Rails 风格的路由字符串解析

ruby-on-rails - PG :ConnectBad Rails 4 Postgresql

ruby-on-rails - Rails 嵌套资源

ruby-on-rails - 在 Ruby 中生成随机 IP 地址的最短方法是什么?