在Ruby中用HashWithIndifferentAccess完全替换Hash是不是很糟糕?

时间:2015-02-23 18:43:28

标签: ruby-on-rails ruby hash activesupport

我发现自己经常遇到错误,我用符号代替字符串访问哈希,反之亦然。我想这样做:

require 'active_support/hash_with_indifferent_access'
Hash = HashWithIndifferentAccess
# (irb):xx: warning: already initialized constant Hash

这个警告是因为已经定义了哈希,但我并不在乎。

当然,性能可能稍差。

当然,也许有些宝石会创建一个包含字符串AND符号的哈希并且会破坏 - 但这有多常见?

这不好吗?反模式?我会后悔这样做吗?有什么缺点?有这样的好/坏经历吗?

2 个答案:

答案 0 :(得分:8)

您认为{}.class在您的kludge之后会是什么样的?是的,它将是Hash

您认为Hash[:a, 'a']会怎么做?是的,SystemStackError因为显而易见的原因。

所以,是的,这是一个坏主意,你会后悔的,一个重要的缺点是它实际上并没有按照你的想法做到。

答案 1 :(得分:1)

最大的缺点是你的Hash函数变为O(n)而不是O(1)。比较字符串要比比较符号要求得多,所以我说这会对性能产生重大影响。

在使用符号访问Hashes时,您不应该遇到错误,因为它们与字符串非常相似,也许阅读本文有帮助:Differences between symbols and strings