在Ruby中用HashWithIndifferentAccess完全替换Hash不好吗?

Is it bad to completely replace Hash with HashWithIndifferentAccess in Ruby?

我发现自己经常 运行 遇到错误,在这些错误中我使用符号而不是字符串访问哈希,反之亦然。我想做:

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

这个警告是因为 Hash 已经被定义了,但我并不关心。

当然,性能可能会稍差。

当然,也许有些人 gem 使用字符串和符号创建一个散列并且会破坏 -- 但这种情况有多常见?

这很糟糕吗?反模式?我会后悔这样做吗?缺点是什么? good/bad 有这样做的经历吗?

你认为 {}.class 在你的拼杀之后会是什么?对,就是Hash.

你认为Hash[:a, 'a']会做什么?是的,SystemStackError 出于明显的原因。

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

最大的缺点是您使哈希函数变为 O(n) 而不是 O(1)。比较字符串比比较符号要求更高,所以我认为这会严重影响性能。

你不应该 运行 在访问带有符号的哈希时遇到错误,因为它们与字符串非常相似,也许阅读这篇文章会有所帮助:Differences between symbols and strings