Ruby - 获取的简写,如果不匹配则返回空哈希?

时间:2016-02-11 19:08:30

标签: ruby

让我说我有

hsh = {}
hsh.fetch(:foobar){{}}
=> {}

是否有hsh.fetch(:somekey){{}}的简写?

当我开始链接事物时会很有用,即

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

2 个答案:

答案 0 :(得分:4)

根据文件

hsh.fetch(:foobar,{})

答案 1 :(得分:4)

crackmind的回答是你问题的正确答案。但是您的示例看起来似乎正在寻找一种方便的方法来挖掘嵌套哈希。

如果您已经使用Ruby >= 2.3,则可能需要使用dig。来自documentation of Hash#dig(请注意,digArrayOpenStruct上也定义了Struct):

  

通过在每一步调用dig来提取由idx对象序列指定的嵌套值,如果任何中间步骤为nil,则返回nil。

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){{}}

dig就像这样:

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