如果存在符号,为什么甚至在哈希中使用字符串

如果使用符号,为什么我会使用字符串1)节省内存2)有更好的访问时间

我看到的代码中有时使用字符串,有时使用符号。 为什么你会选择具有符号所有优点的字符串?

好的,您的访问键通常不是字符串,因此您始终可以键入转换。 但是,为什么铸造不是隐含发生的呢?

有不同的权衡,

  • 符号最适用于有界键集,理想情况下限于源代码中的值。
  • 字符串最适用于从用户输入或其他外部源获取的无限组密钥,例如处理非结构化JSON数据时。

为什么?

在Ruby 2.2符号没有被垃圾收集之前,处理无限制的密钥集显然会导致内存泄漏。 但即使有车库collections,仍然需要“实习”所有字符串输入以将它们变成符号。 因此,如果您的代码消耗文本文件或Web中的字符串,那么只使用字符串键是最明智的。

我看到的代码中有时使用字符串,有时使用符号。 为什么你会选择具有符号所有优点的字符串?

在Ruby 2.2中添加Symbol GC之前,在运行时生成符号会导致长时间运行的应用程序出现内存泄漏。 使用字符串是一种绕过这个内存问题并获得gc的方法,它在ruby生态系统中徘徊。 对于冻结字符串支持,在某些时候符号和字符串将是相同的。

好的,您的访问键通常不是字符串,因此您始终可以键入转换。 但是,为什么铸造不是隐含发生的呢?

哈希将对象映射到对象。 这个:

{"a"=>1, :a=>1} 

是一个有效的哈希。

如果要隐式转换,可以使用ActiveSupport中的HashWithIndifferentAccess。