我有一种情况,当我尝试访问使用符号不工作的哈希键,但是当我用绳子访问它,它工作正常。 这是一个符号建议在琴弦我的理解,所以我试图清理我的脚本。 我用我的脚本的其他地方使用哈希符号,它仅仅是行不通这种特定情况。
下面是摘录:
account_params ={}
File.open('file', 'r') do |f|
f.each_line do |line|
hkey, hvalue = line.chomp.split("=")
account_params[hkey] = hvalue
end
end
account_scope = account_params["scope"]
这工作,但如果我用它没有一个符号,如下图所示:
account_scope = account_params[:scope]
当我使用一个符号,我得到:
can't convert nil into String (TypeError)
我不知道,如果它的问题,但这个特定的哈希值的内容看起来是这样的:
12345/ABCD123/12345
你从文件中读取的关键是一个字符串。 事实上,你从文件中读取的一切是一个字符串。 如果你想的钥匙,你的散列是符号,您可以更新脚本中做到这一点,而不是:
account_params[hkey.to_sym] = hvalue
这将打开“HKEY”成符号,而不是使用字符串值。
Ruby提供多种这些类型的,这将迫使值插入到一个不同类型的方法的。 例如:to_i将它带到一个整数,to_f的浮动,而to_s将采取一些回字符串值。
你可以使用这种混合式: https://gist.github.com/3778285
这将增加“哈希随着冷漠访问”行至现有的单哈希实例,不复制或复制该散列实例。 从文件读取,或者也读从Redis的参数哈希情况而言,这样可以在你的情况下非常有用。
看到里面要点的意见更多的细节。
require 'hash_extensions' # Source: https://gist.github.com/3778285
account_params = {'name' => 'Tom' } # a regular Hash
class << account_params
include Hash::Extensions::IndifferentAccess # mixing-in Indifferent Access on the fly
end
account_params[:name]
=> 'Tom'
account_params.create_symbols_only # (optional) new keys will be created as symbols
account_params['age'] = 22
=> 22
account_params.keys
=> ['name',:age]