Chef Ruby 挖错了参数个数

Chef Ruby dig Wrong Number of Arguments

我正在尝试用 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

我们没有将其添加到上方节点支持的 API 中,因为它与您要在此处使用的现有 node.read 方法重叠。它看起来像一个散列,但只支持方法的一个子集。

编辑:既然我不在移动设备上,您想要的完整代码可能是:

node.read('k1', 'k2', 'k3') || node.read('kA', 'kB', 'kC')

除非 false 是一个有效值。

原来 node 不是散列,而是节点对象,所以 .dig() 不起作用。我最终使用了以下内容:

if node.read('k1', 'k2', 'k3').nil?
  myvar1 = node['kA']['kB']['kC']
else
  myvar1 = node['k1']['k2']['k3']
end