查看这个官方文档:https://docs.chef.io/resource_template.html我看到了将变量传递给模板资源的示例,这些示例使用“{”,“({”或“(”来确定变量的范围。
我找不到任何可以解释这种差异的地方,或者为什么我会使用其中一种形式而不是另一种形式。运行配方时真的有任何实际差异吗?
示例 1:
template '/tmp/config.conf' do
source 'config.conf.erb'
variables(
:config_var => node['configs']['config_var']
)
end
示例 2:
template '/tmp/config.conf' do
source 'config.conf.erb'
variables{
:config_var => node['configs']['config_var']
}
end
示例 3:
template '/tmp/config.conf' do
source 'config.conf.erb'
variables({
:config_var => node['configs']['config_var']
})
end
答案1
这是红宝石的事情,不是厨师的事情。
使用时,( :key => value )
您传入的是隐含的哈希值。Ruby 会判断括号内的内容是否为哈希值,并自动将其转换为哈希值。
当您使用 时{ }
,您实际上是在传递一个块。Ruby 然后执行该块,并将该块的结果作为参数传回。我发现这种表示法到目前为止最有可能给您带来麻烦。
使用时,({ :key => value })
您明确将哈希传递给方法。括号明确定义方法参数,方括号是定义哈希的标准符号(没有 ruby magic 可以自动检测参数的哈希性)。
我想说没有明确的最佳/正确的方法,但是 ruby 风格指南似乎更喜欢第一个版本。