我想在ruby Hash中有两个相同的效果,一个是用字符串添加对,另一个是用字符串的符号添加对。此映射用作构建ActiveRecord模型的映射。但经过尝试,结果出人意料。
map = {}
map['list_price'] = 14.56
puts "#{map.inspect}"
map[:list_price] = 23.45
puts "#{map.inspect}"
结果是:
{"list_price"=>14.56}
{:list_price=>23.45, "list_price"=>14.56}
有没有办法在内部使两个键成为同一个键?
答案 0 :(得分:4)
我认为你有几种可能性:
更改[]=
的{{1}}方法,将所有字符串键转换为符号,同时为键指定值。除了other bad things related to MP之外,还有另一个缺点,因为其他方法可以用来添加新的哈希元素(Hash
等),如果你想确保不这样做,你也必须实现它们。使用字符串。
您可以继承Hash类并覆盖merge
方法,但上述缺点仍然适用。
您可以使用您的类包装哈希,并仅实现某些方法。这会影响使用率,因为其他哈希方法将无法使用。
阅读上面链接的Jorg Mittag的帖子,而不是直接回答你的问题,但很好地作为改变现有类行为的不同方法的参考。
通常情况下,这是[]=
在第一种情况下的样子,其他情况类似:
[]=