红宝石:: Hash#dig
是否曾经想过是否有更好的方法遍历多层哈希或数组以检索特定值?幸运的是,Ruby2.3引入了一种名为的新方法 dig。
catalogue = { drinks: { apple_juice: { stock: 8, price_per_unit: 2.4 }, orange_juice: { stock: 4, price_per_unit: 2.2 } } }
给定上述哈希值,我们将通过以下行访问每单位橙汁的价格。
catalogue[:drinks][:carrot_juice][:price_per_unit] => NoMethodError: undefined method `[]' for nil:NilClass
为了减轻Rails引发的错误,我们需要在导航散列结构时检查每个键的存在。
catalogue[:drinks] && catalogue[:drinks][:carrot_juice] && catalogue[:drinks][:carrot_juice][:price_per_unit]
通过使用 dig 我们遵循 DRY 并通过平稳处理nil值来检索每个键对象的值。
catalogue.dig(:drinks, :carrot_juice, :price_per_unit) => nil catalogue.dig(:drinks, :apple_juice, :price_per_unit) => 2.4
其他连结
RubyDoc–Hash#dig