鉴于根据这篇文章使用符号作为散列键非常棒,你什么时候需要使用字符串作为散列键?
键连接,例如
hash["name" + "xxx"]
可能是这样一种情况,但我认为这种需求很少见。
甚至键连接也可以轻松转换:
hash[ ("name" + "xxx").to_sym ]
简短的回答是,避免在 Ruby 中使用字符串作为键,您可以从中受益,因为键只是语义标签,使您能够在代码中引用值。在这种情况下,很明显符号可以更有效地完成这项工作(好吧,如上所述,前提是您没有执行很多转换来生成标签)。
当您解析任意数据(例如 XMl 或 JSON)时,字符串作为键可能是表达结构的更自然方式。同样,从解析器发出的字符串到标签的转换时间可能是一个因素。
如果您hash["name"+"xxx"]
在循环中执行多次,那么将键拉出循环并将其转换为符号可能会有所帮助。这只是一个性能问题。符号使用内存中的单个位置,但字符串在每次创建时都会被计算。
如果您有一个如下所示的 .yaml 文件:
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
并且您使用 加载它YAML::load_file('filename')
,那么您将需要使用字符串作为键。
但是,如果您的 yaml 文件如下所示:
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
然后,您可以使用符号作为键。在这种情况下,ruby 方面首选符号,但 yaml 使用字符串会更干净。