我正在尝试使用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
答案 0 :(得分:2)
我们没有将其添加到上面节点支持的API,因为它与现有的node.read
方法重叠,这是您要在此处使用的方法。它看起来像一个哈希,但只支持方法的一个子集。
node.read('k1', 'k2', 'k3') || node.read('kA', 'kB', 'kC')
除非false
是有效值。
答案 1 :(得分:1)
结果node
不是哈希,而是节点对象,因此.dig()
不起作用。我最终使用了以下内容:
if node.read('k1', 'k2', 'k3').nil?
myvar1 = node['kA']['kB']['kC']
else
myvar1 = node['k1']['k2']['k3']
end