为什么 Ruby 代表我的哈希键?

Why is Ruby symbolising my hash keys?

我在编写 Ruby 模块(Sinatra 应用程序的一组辅助方法)时遇到了一些奇怪的事情。我将散列声明为常量,键为字符串。后来,当我尝试检索一个值时,我得到了 nil。在检查散列时,我发现键已转换为符号。怎么回事?

这是一个简化的例子:

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

是您环境中的某些东西改变了 Hash

从研究 RANGES.class.ancestors 开始,同时寻找改进(您可能需要 grep 查找 using