繁体   English   中英

任何人都可以弄清楚这块红宝石代码的作用是什么?

[英]Can anyone figure out what this block of ruby code does?

如果这是一次采访的一部分,我猜测它需要传入数据,将其翻译成本地语言然后提交到数据库? 这显然是错的。

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

看起来它只是递归地将嵌套哈希中的键转换为符号。

optimize({'k' => {'l' => 'v'}})
#=> {:k=>{:l=>"v"}}

Optimize是一个糟糕的名称,应该使用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存在的原因之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM