为什么Ruby象征着我的哈希键?

时间:2016-06-21 12:50:45

标签: ruby hash symbols

在编写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轻松解决这个问题,但我想了解这里发生了什么。

1 个答案:

答案 0 :(得分:5)

您环境中的某些内容会改变Hash

首先查看RANGES.class.ancestors,同时寻找改进(那些你可能需要为using grep的那些)