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



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

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

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

当然,性能可能会稍差一些。

当然,也许某个gem会创建一个带有字符串和符号的散列,并将其破坏——但这有多常见?

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

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

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

所以,是的,这是一个坏主意,你会后悔的,一个重要的缺点是它实际上并没有做你认为它会做的事情。

最大的缺点是使哈希函数变成O(n)而不是O(1)。比较字符串比比较符号要求更高,所以我认为这将是一个显著的性能打击。

当使用符号访问哈希时,您不应该真的遇到错误,因为它们与字符串非常相似,阅读本文可能会有所帮助:符号和字符串之间的差异

相关内容

最新更新