gpt4 book ai didi

ruby - Chef LWRP 的属性方法是什么?我可以传递什么?

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:33 25 4
gpt4 key购买 nike

我在 chef 资源中有以下属性:

attribute :attribName, kind_of: String, name_attribute: true, default: 'big string sldkjslkdflksdksdlkff'

我想把它拆开让它看起来不错,所以我这样做了:

attribute [
:attribName,
kind_of: String,
name_attribute: true,
default: 'big string sldkjslkdflksdksdlkff'
]

但是收敛的时候出现错误:

   NoMethodError
-------------
undefined method `to_sym' for #<Array:0x00000004a63b60>
Did you mean? to_s
to_yaml
to_set

Platform:
---------
x64-mingw32

Running handlers:
[2016-10-01T19:07:39-07:00] ERROR: Running exception handlers
Running handlers complete
[2016-10-01T19:07:39-07:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 11 seconds
[2016-10-01T19:07:39-07:00] FATAL: Stacktrace dumped to C:/Users/ADMINI~1/AppData/Local/Temp/kitchen/cache/chef-stacktrace.out
[2016-10-01T19:07:39-07:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-10-01T19:07:39-07:00] FATAL: NoMethodError: undefined method `to_sym' for #<Array:0x00000004a63b60>
Did you mean? to_s
to_yaml
to_set

所以我认为资源文件中的 attribute 只是接受参数数组的方法,并将 [..args..] 传递给它是一回事。为什么这不起作用?我想我对这种情况下的 ruby​​ 对象属性是什么类型以及它们的行为是什么感到困惑。

最佳答案

attribute 方法试图符号化第一个参数,即属性的名称。第二个参数看起来像是选项的散列,因此方法签名应如下所示:def attribute(name, options={})。当您将所有内容都放在方括号中时,您发送了一个数组作为第一个参数。

尝试像这样重新格式化它:

attribute :attribName,
kind_of: String,
name_attribute: true,
default: 'big string sldkjslkdflksdksdlkff'

如果你真的不喜欢第一个参数,你可以使用 splat(我一点也不喜欢这个):

attribute *[
:attribName,
{
kind_of: String,
name_attribute: true,
default: 'big string sldkjslkdflksdksdlkff'
}
]

这会将数组元素转换为参数。

关于ruby - Chef LWRP 的属性方法是什么?我可以传递什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com