在编写Ruby模块(一组Sinatra应用程序的辅助方法)时,我遇到了一些奇怪的事情。我将哈希声明为常量,键为字符串。后来,当我尝试检索一个值时,我得到零。在检查哈希时,我发现密钥已经转换为符号。发生了什么事?
这是一个简化的例子:
module HelperModule
RANGES = {
'a' => 1...60,
'b' => 60...90,
'c' => 90..999
}.freeze
def find_range(key)
RANGES[key] # Returns nil when key is 'a', 'b' or 'c'
end
end
检查RANGES产量:{:a=>[1...60], :b=>[60...90], :c=>[90..999]}
。
我可以通过转换键.to_sym
轻松解决这个问题,但我想了解这里发生了什么。
答案 0 :(得分:5)
您环境中的某些内容会改变Hash
。
首先查看RANGES.class.ancestors
,同时寻找改进(那些你可能需要为using
grep的那些)