在散列中使用符号有一些烦恼。例如,我们使用的JSON gem总是从解析的任何JSON字符串中返回字符串,因此无论我们在何处引用从解码JSON生成的哈希,都必须使用字符串和符号的组合来访问哈希。是否可以在任何地方使用字符串,并且从不在Ruby on Rails中使用符号?
风格明智,可以通过仅使用字符串保持事物的一致性吗?
在散列中使用符号有一些烦恼。例如,我们使用的JSON gem总是从解析的任何JSON字符串中返回字符串,因此无论我们在何处引用从解码JSON生成的哈希,都必须使用字符串和符号的组合来访问哈希。是否可以在任何地方使用字符串,并且从不在Ruby on Rails中使用符号?
风格明智,可以通过仅使用字符串保持事物的一致性吗?
字符串是可变的,因此每次引用"foo"
ruby创建一个新对象。你可以通过在irb中调用"foo".object_id
来测试。另一方面,符号不是,所以每次引用:foo
时,ruby都会返回相同的对象。
关于“风格”和“一致性”,您始终可以使用hash.symbolize_keys!
作为接收的json数据,这会将所有字符串键转换为符号。反之亦然 - hash.stringify_keys!
使它们再次成为字符串。
没有规定说散列键应该是一个符号。
在Rails中将符号作为约定被看作是一个惯例...... Rails使得传递哈希大量使用允许多个参数,并且这些哈希中的键通常是表示它们的符号方法调用的预期/允许参数。
如果你有什么嵌套哈希?我不认为symbolize_keys!或stringify_keys!将更新那些 – apiary 2010-07-26 04:33:00
@apiary,编写自己的'symbolize_keys'递归版本,并将其混合到'Hash'类中。 – 2010-07-26 04:52:55