我发现自己经常遇到错误,我用符号代替字符串访问哈希,反之亦然。我想这样做:
require 'active_support/hash_with_indifferent_access'
Hash = HashWithIndifferentAccess
# (irb):xx: warning: already initialized constant Hash
这个警告是因为已经定义了哈希,但我并不在乎。
当然,性能可能稍差。
当然,也许有些宝石会创建一个包含字符串AND符号的哈希并且会破坏 - 但这有多常见?
这不好吗?反模式?我会后悔这样做吗?有什么缺点?有这样的好/坏经历吗?
答案 0 :(得分:8)
您认为{}.class
在您的kludge之后会是什么样的?是的,它将是Hash
。
您认为Hash[:a, 'a']
会怎么做?是的,SystemStackError
因为显而易见的原因。
所以,是的,这是一个坏主意,你会后悔的,一个重要的缺点是它实际上并没有按照你的想法做到。
答案 1 :(得分:1)
最大的缺点是你的Hash函数变为O(n)而不是O(1)。比较字符串要比比较符号要求得多,所以我说这会对性能产生重大影响。
在使用符号访问Hashes时,您不应该遇到错误,因为它们与字符串非常相似,也许阅读本文有帮助:Differences between symbols and strings