【发布时间】:2016-03-24 15:12:18
【问题描述】:
Ruby 2.3 在Array 和Hash 上引入了一个名为dig 的新方法。我在博客文章中看到的有关新版本的示例都是人为的和令人费解的:
# Hash#dig
user = {
user: {
address: {
street1: '123 Main street'
}
}
}
user.dig(:user, :address, :street1) # => '123 Main street'
# Array#dig
results = [[[1, 2, 3]]]
results.dig(0, 0, 0) # => 1
我没有使用三重嵌套平面数组。有什么实际的例子来说明这将如何有用?
更新
事实证明,这些方法解决了最常见的 Ruby 问题之一。下面的问题大约有 20 个重复,所有这些问题都通过使用 dig 解决:
How to avoid NoMethodError for missing elements in nested hashes, without repeated nil checks?
Ruby Style: How to check whether a nested hash element exists
【问题讨论】:
-
你刚刚解析了一些json是一个很现实的例子……
-
首先,如果您使用索引并且沿途缺少某些东西,您将不会收到 nil 类的方法错误。其次,使用
dig方法更容易进行动态调用。