如何为符号和字符串制作相同的ruby map键?

时间:2010-12-18 07:14:02

标签: ruby hash symbols

我想在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}

有没有办法在内部使两个键成为同一个键?

1 个答案:

答案 0 :(得分:4)

我认为你有几种可能性:

猴修补

更改[]=的{​​{1}}方法,将所有字符串键转换为符号,同时为键指定值。除了other bad things related to MP之外,还有另一个缺点,因为其他方法可以用来添加新的哈希元素(Hash等),如果你想确保不这样做,你也必须实现它们。使用字符串。

继承

您可以继承Hash类并覆盖merge方法,但上述缺点仍然适用。

包装

您可以使用您的类包装哈希,并仅实现某些方法。这会影响使用率,因为其他哈希方法将无法使用。

阅读上面链接的Jorg Mittag的帖子,而不是直接回答你的问题,但很好地作为改变现有类行为的不同方法的参考。

通常情况下,这是[]=在第一种情况下的样子,其他情况类似:

[]=