假设:
array = {first: {second: {one: 1, two: 2, three: 3 }}}
假设任何东西都可以nil
,那么在不跳过nil的情况下访问嵌套值的最简单/最简洁的方法是什么?如果任何成员不存在,则应该返回nil
。
我们想出了这些:
Pure Ruby:
value = array.fetch(:first, {}).fetch(:second, {}).fetch(:four, nil)
value = begin array[:first][:second][:four]; rescue; end
Ruby on Rails:
value = array.try(:[], :first).try(:[], :second).try(:[], :four)
你能想出什么?您更喜欢哪种方法?为什么?
谢谢!
答案 0 :(得分:1)
这是编码风格的问题。使用Ruby 2.0,您也可以这样做,我可能会更喜欢:
value = array[:first].to_h[:second].to_h[:four]
如果您不想每次都输入to_h
,可以定义方法:
class Hash
def safe_fetch k; self[k].to_h end
end
value = array.safe_fetch(:first).safe_fetch(:second)[:four]
答案 1 :(得分:-1)
我更喜欢内联rescue
,因为它更像 Rubyistic 。
array = {first: {second: {one: 1, two: 2, three: 3 }}}
value = array[:first][:second][:four] rescue nil # => nil
value = array[:first][:second][:two] rescue nil # => 2