- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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
最佳答案
在我们的例子中,NoMethodError
由于 nil
引用是迄今为止我们在生产环境中看到的最常见的错误。
新的 Hash#dig
允许您在访问嵌套元素时省略 nil
检查。由于散列最适用于数据结构未知或易变的情况,因此获得官方支持非常有意义。
让我们举个例子。以下内容:
user.dig(:user, :address, :street1)
不等同于:
user[:user][:address][:street1]
在 user[:user]
或 user[:user][:address]
为 nil
的情况下,这将导致运行时错误。
相反,它等同于以下内容,这是当前的成语:
user[:user] && user[:user][:address] && user[:user][:address][:street1]
请注意,将在别处创建的符号列表传递到 Hash#dig
中是多么简单,而从这样的列表中重新创建后一个构造并不是很简单。 Hash#dig
允许您轻松地进行动态访问,而不必担心 nil
引用。
显然 Hash#dig
也短了很多。
需要注意的重要一点是,如果任何键结果是,Hash#dig
本身返回 nil
,这可能导致同一类错误一步,所以提供一个合理的默认值是个好主意。 (这种提供始终响应预期方法的对象的方式称为 Null Object Pattern。)
同样,在您的示例中,空字符串或类似“N/A”的内容,具体取决于什么有意义:
user.dig(:user, :address, :street1) || ""
关于arrays - 如何使用 Ruby 2.3 中引入的 Array#dig 和 Hash#dig?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612885/
基本上我想使用 #dig 分配一个数组。 我必须是这样的: hash = { :first => { :second => [1,2,3,4] } } 我会使用Hash#dig
Ruby 2.3 在Array 和Hash 上引入了一种新方法,称为dig。我在有关新版本的博客文章中看到的示例是做作和令人费解的: # Hash#dig user = { user: {
Ruby 2.3 在Array 和Hash 上引入了一种新方法,称为dig。我在有关新版本的博客文章中看到的示例是做作和令人费解的: # Hash#dig user = { user: {
挖+ trace google.com ; > DiG 9.10.6 > +trace google.com ;; global options: +cmd ;; Received 12 bytes
喜欢 String urlString="http://myApp:8888/new/bin/save/DIG/WebHome" 我想看看这个字符串是否包含模式/DIG/。我想我可以使用 String
是否可以通过检查“dig”的输出来检查域名的存在? 在绑定(bind)源中,我发现了这些常量: 0 DNS_R_NOEROR 1 DNS_R_FORMERR 2 DNS_R_SERVFAIL 3 DN
我正在尝试从 5 个表中提取数据并显示数据。 ple_active_starter ple_parkeon_starter ple_pbp_starter ple_ips_starter ple_di
我正在编写我的第一个脚本。我想使用 dig 从 .txt 文件中获取多个站点的查询时间并打印平均值。 Here's the source ,我不知道如何只打印没有文本的查询时间。谢谢! #!/bi
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有一个用于 dig 的 .diff edns-client-ip 补丁文件,但我不知道如何安装它。有小费吗?它的补丁可以在这里找到 - http://wilmer.gaa.st/edns-clien
大家好,我知道这段代码的作用: 1.]我的第一个问题 x = 4 y = x 但是这个呢。为什么即使在这种情况下也使用相同的地址? x = 4 y = 4 id(x) 12345678 id(y) 1
假设我有以下内容: nested_object = [0, 1, 2, {foo: 'bar'}] 在搜索更深的嵌套对象时,如何使用 dig 来选择数组的最后一个元素? 最佳答案 任何 dig 方法参
我想知道是否可以通过一次 dig 调用来获取 IPv4 和 IPv6 地址? 例如,这给出了 IPv4 地址: dig hostname A 这个命令会给我 IPv6 地址: dig hostname
出于测试目的,我尝试使用 this method 获取域的所有 DNS 记录集的列表。 。 这有效: root@cs:/# dig @nameserver domain ; > DiG 9.9.2-P
我使用的是centos 6.4。在进行 dig 或 nslookup 时,出现以下错误 挖掘 google.com dig: error while loading shared libraries:
我尝试使用 Helm 3.4.0 安装 JupyterHub 1.0.1,但收到有关 dig 函数的错误。 "jupyterhub" already exists with the same conf
我目前正在尝试编写一个脚本,该脚本将写出它检测到的可用域。第一个想法是写出任何包含“NXDOMAIN”的域,但这最终包括我发现无法注册的域..所以我还添加了对“a.gtld-servers.net”的
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
是否可以使用单个 dig 命令查找域的 A(IP 地址)和 NS(名称服务器)? 我可以使用 dig google.com A +short 或 dig google.com NS +short 但肯
我目前正在尝试编写一个脚本,该脚本将写出它检测到的可用域。第一个想法是写出任何包含“NXDOMAIN”的域,但这最终包括我发现无法注册的域..所以我还添加了对“a.gtld-servers.net”的
我是一名优秀的程序员,十分优秀!