我想在Chef/Ruby中做一些非常简单的事情。 我只想以安全和干净的方式检查我的哈希表中的某个键是否为 nil
。
这是我的代码:
if node.dig('k1', 'k2', 'k3').nil?
myvar1 = node['kA']['kB']['kC']
else
myvar1 = node['k1']['k2']['k3']
end
然而,我遇到了一个“配方编译错误”(Recipe Compile Error),错误信息如下:
。ArgumentError
-------------
wrong number of arguments (given 1, expected 0)
我在这里做错了什么?我已经阅读了关于 dig
的文档,链接地址为:http://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig,但好像并没有起到帮助作用。
我的 Ruby 版本是 2.3。
dig
方法并非文档中所述的那个。node
是什么?它是一个普通的哈希还是其他什么东西?是否有任何代码补丁引入了另一个dig
方法?查找的一种方法是:node.method(:dig).source_location
。 - tadmannode
不是一个Hash
,而是一个Chef::Node
,并且没有dig
方法。因此,我假设这行代码根本就不会被执行,否则你会得到一个NoMethodError
而不是ArgumentError
。如果想要 "dig",可能应该使用node.attributes.dig
。 - engineersmnky