如果使用符号,为什么我会使用字符串1)节省内存2)具有更好的访问时间
我看到了有时会使用字符串的代码,有时会使用符号。为什么你会选择具有符号所有优点的字符串?
好的,您的访问键通常不是字符串,因此您始终可以键入转换。但是,为什么铸造不是隐含发生的呢?
答案 0 :(得分:3)
我看到了有时会使用字符串的代码,有时会使用符号。为什么你会选择具有符号所有优点的字符串?
在Ruby 2.2中添加Symbol GC之前,在运行时生成符号会导致长时间运行的应用程序出现内存泄漏。使用字符串是一种绕过这个内存问题并获得gc的方法,它会在ruby生态系统中徘徊。对于冻结字符串支持,在某些时候符号和字符串将是相同的。
好的,您的访问键通常不会成为字符串,因此您始终可以键入转换。但是,为什么铸造不是隐含发生的呢?
哈希将对象映射到对象。这样:
{"a"=>1, :a=>1}
是有效的哈希。
如果您想隐式投射,可以使用ActiveSupport中的HashWithIndifferentAccess 。
答案 1 :(得分:2)
有不同的权衡,
为什么?
在Ruby 2.2符号没有被垃圾收集之前,处理无限制的密钥集显然会导致内存泄漏。但即使有车库收藏,仍然需要付出很大的代价才能实现"实习生"所有字符串输入将它们变成符号。因此,如果您的代码消耗文本文件或网络中的字符串,那么只使用字符串键是最明智的。