我发现自己需要这样的警卫:
if hash[:foo] && hash[:foo][:bar] && hash[:foo][:bar][:baz]
puts hash[:foo][:bar][:baz]
end
我想以某种方式缩短这一点;我知道我可以包装在一个开始/救援区,但这看起来更糟。也许是这样的: ruby Hash include another hash, deep check
答案 0 :(得分:2)
类似的东西:
def follow_hash(hash, path)
path.inject(hash) { |accum, el| accum && accum[el] }
end
value = follow_hash(hash, [:foo, :bar, :baz])
puts value if value
答案 1 :(得分:1)
我发现这篇文章非常有用:http://avdi.org/devblog/2011/06/28/do-or-do-not-there-is-no-try/
value = Maybe(params)[:foo][:bar][:baz][:buz]