将变量传递给厨师模板的正确方法是哪种方式?

前端之家收集整理的这篇文章主要介绍了将变量传递给厨师模板的正确方法是哪种方式?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
查看此官方文档: https://docs.chef.io/resource_template.html我看到将变量传递给Template资源的示例,该变量使用“{”,“({”或“(”来定义变量范围).

我找不到解释差异的地方,或者为什么我会使用一种形式而不是另一种形式.运行食谱时真的有什么实际区别吗?

例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

解决方法

这是一个红宝石的东西,而不是厨师的事情.

当您使用(:key => value)时,您传入的是隐含的哈希. Ruby决定它在parens中看到的内容是类似哈希的,并自动转换为哈希.

使用{}时,实际上是在传递一个块.然后Ruby执行块,并将块的结果作为参数传回.到目前为止,我发现这种符号最有可能给你带来麻烦.

当您使用({:key => value})时,您明确地将哈希传递给方法. parens显式定义方法参数,括号是定义哈希的标准表示法(没有ruby魔法来自动检测参数的哈希值).

我会说没有明确的最佳/正确的方式,但红宝石风格指南似乎更喜欢第一个版本.

猜你在找的Ruby相关文章