Ruby hash / subhash存在检查

时间:2011-11-14 17:04:56

标签: ruby exception hash

我发现自己需要这样的警卫:

if hash[:foo] && hash[:foo][:bar] && hash[:foo][:bar][:baz] 
    puts hash[:foo][:bar][:baz]
end

我想以某种方式缩短这一点;我知道我可以包装在一个开始/救援区,但这看起来更糟。也许是这样的: ruby Hash include another hash, deep check

2 个答案:

答案 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]