2016-02-11 47 views

回答

4

根據文檔

hsh.fetch(:foobar,{}) 
+0

看起來更好。會嘗試。 –

4

crackedmind的答案是正確的回答你的問題。但是你的例子看起來像你正在尋找一種方便的方式來挖掘嵌套的散列。

如果您已經在Ruby >= 2.3中,您可能需要改爲使用。從documentation of Hash#dig(注意也上ArrayOpenStructStruct定義):

提取物通過在每個步驟主叫掏,返回nil如果任何中間步驟是零通過IDX對象序列中指定的嵌套值。

h = { foo: {bar: {baz: 1}}} 

h.dig(:foo, :bar, :baz)   #=> 1 
h.dig(:foo, :zot, :xyz)   #=> nil 

g = { foo: [10, 11, 12] } 
g.dig(:foo, 1)     #=> 11 

你可以重新寫你的榜樣

get_product.fetch(:description){{}}.fetch(:summary){{}} 

與這樣的:

get_product.dig(:description, :summary) || {} 
+0

哇。那很棒。希望我在Ruby 2.3上。大多數項目仍然使用1.9.3。你是絕對正確的。我正在尋找一種方便的方法來挖掘嵌套散列。 –

+1

David,如果你經常使用它,你當然可以創建自己的'Hash#dig'。我還想建議你可以把它放在'Refinement'中,你會「包含」,但是後來記得'Refinements'也在v1.9之後。 –

+0

我也聽說過ruby_dig的寶石。可能最終會使用它。 –