簡體   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