为什么 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
)
我在编写 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
)