如果将此作为访谈的一部分,我猜测它将传入的数据翻译成本地语言然后提交到数据库?这显然是错误的。
def optimize(hsh)
hsh.reduce({}) do |new_hsh, (k,v)|
new_hsh[k.to_sym] = v.kind_of?(Hash) ? optimize(v) : v
new_hsh
end
end
答案 0 :(得分:4)
看起来它只是递归地将嵌套哈希中的键转换为符号。
optimize({'k' => {'l' => 'v'}})
#=> {:k=>{:l=>"v"}}
优化名称不佳,应使用each_with_object
代替reduce
:
def symbolize_keys(hash)
hash.each_with_object({}) do |(k, v), new_hash|
new_hash[k.to_sym] = v.is_a?(Hash) ? symbolize_keys(v) : v
end
end
puts symbolize_keys('k' => { 'l' => 'v' })
#=> {:k=>{:l=>"v"}}
此方法可用于确保嵌套哈希具有正确的密钥。有些开发人员喜欢使用字符串键,有些则喜欢使用符号:
{'a' => 'b'}[:a]
#=> nil
symbolize_keys({'a' => 'b'})[:a]
#=> 'b'
服务器通过字符串与对方交谈,但Rails代码通常用符号作为键来编写。这是HashWithIndifferentAccess
存在的原因之一。