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

Ruby-如果不匹配,获取并返回空哈希的缩写?,ruby,Ruby,假设我有 hsh = {} hsh.fetch(:foobar){{}} => {} 有hsh.fetch(:somekey){{{}的缩写吗 当我开始链接东西时会很有用,例如 get\u product.fetch(:description){{{}.fetch(:summary){{{}}根据文档 hsh.fetch(:foobar,{}) 根据文件 hsh.fetch(:foobar,{}) crackedmind的答案是你问题的正确答案。但您的示例看起来像是在寻找一种方便的方

假设我有

hsh = {}
hsh.fetch(:foobar){{}}
=> {}
hsh.fetch(:somekey){{{}
的缩写吗

当我开始链接东西时会很有用,例如


get\u product.fetch(:description){{{}.fetch(:summary){{{}}

根据文档

hsh.fetch(:foobar,{})

根据文件

hsh.fetch(:foobar,{})

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

如果您已经使用Ruby
=2.3
,那么您可能需要使用
dig
。从(请注意,
dig
也在
Array
OpenStruct
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) || {}

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

如果您已经使用Ruby
=2.3
,那么您可能需要使用
dig
。从(请注意,
dig
也在
Array
OpenStruct
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) || {}

看起来好多了。我会试试的,看起来好多了。我会试试的。哇。太好了。但愿我在Ruby 2.3上。大多数项目仍使用1.9.3。你完全正确。我正在寻找一种方便的方法来挖掘嵌套哈希。David,如果您经常使用它,您当然可以创建自己的
哈希#dig
。我还想建议您可以将其放入
细化
,您将
包括
,但随后记住
细化
也是v1.9之后的内容。我也听说了ruby_dig gem。可能会用这个来代替。哇。太好了。但愿我在Ruby 2.3上。大多数项目仍使用1.9.3。你完全正确。我正在寻找一种方便的方法来挖掘嵌套哈希。David,如果您经常使用它,您当然可以创建自己的
哈希#dig
。我还想建议您可以将其放入
细化
,您将
包括
,但随后记住
细化
也是v1.9之后的内容。我也听说了ruby_dig gem。最终可能会使用它。