ruby - 无法掌握 Ruby 中的符号

标签 ruby symbols

过去几天我一直在研究如何理解 Ruby 中的符号。我在 Google 上阅读了每篇关于 Ruby 符号的文章,其中大部分都是错误的解释,所以我来到这里,我看到一些关于这个主题的问题存在,但是我不明白,抱歉。

根据我的阅读,我了解到符号是不可变且唯一的,因此内存消耗和性能优于常规字符串。

问题#1
符号在生活中的目的是否与字符串一样服务于相同的利基市场?符号的目的是作为方便的常量而不携带值,就像后面的部分:它是实际值吗?

问题#2
我什么时候真正知道在哪里使用符号?

我非常感谢您自己对符号的解释,而不是链接到 Google 上的文章(我确保我已经阅读了它!)。

如果你能提供比我在这里询问的更多关于符号的信息,我也很感激你的时间,因为我根本不了解它们,甚至不了解存储在 :symbol_something 中的内容,它是引用还是什么?

非常感谢您的帮助!

最佳答案

ruby 中的符号是一种有效利用不可变字符串的方法。例如,假设您想使用字符串“my_key”作为散列键。简单地使用字符串既浪费空间又浪费效率,因为每次指定散列键“my_key”时,即使字符串值内容相同,也会在不同的内存位置创建不同的字符串实例!所以如果你有 100 个 my_hash['my_key'] 的实例,你就有 100 个字符串 'my_key' 的实例。符号 :my_key 不是这样。 :my_key 永远只有一个实例,无论您使用它多少次!

您应该在通常使用不可变字符串作为标识符的地方使用符号。

关于ruby - 无法掌握 Ruby 中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6725518/

相关文章:

ruby-on-rails - Bundler 将我的 gem 放在我的项目目录中

arrays - 合并数组时继承自定义方法

c++ - 是否有解决 undefined reference /未解析符号问题的通用指南?

python - 如何输入一个数字并使该数字显示一个符号那么多次?

r - R控制台左侧的 “+”符号是什么意思?

ruby - 为什么respond_to?在 Ruby 中需要符号作为参数吗?

ruby - 将数组作为值插入另一个数组

ruby - RSpec - 如果我避免使用 let、let 和 before,如何实现相同的功能?

ruby - 安装 ruby​​installer-1.9.2-p136 后运行 watir 脚本时出现错误 "msvcrt-ruby18.dll is missing"

binding - Clojure:将符号重新绑定(bind)到新的数据结构