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

Ben*_*ull 3 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
Run Code Online (Sandbox Code Playgroud)

检查RANGES产量:{:a=>[1...60], :b=>[60...90], :c=>[90..999]}.

我可以通过转换键轻松地解决它.to_sym,但我想了解这里发生了什么.

Vas*_*fed 5

这是你环境中改变的东西Hash.

从调查开始RANGES.class.ancestors,也寻找改进(那些你可能需要grep using)