查看此官方文档:
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@H_404_16@
解决方法
这是一个红宝石的东西,而不是厨师的事情.
当您使用(:key => value)时,您传入的是隐含的哈希. Ruby决定它在parens中看到的内容是类似哈希的,并自动转换为哈希.
使用{}时,实际上是在传递一个块.然后Ruby执行块,并将块的结果作为参数传回.到目前为止,我发现这种符号最有可能给你带来麻烦.
当您使用({:key => value})时,您明确地将哈希传递给方法. parens显式定义方法参数,括号是定义哈希的标准表示法(没有ruby魔法来自动检测参数的哈希值).
我会说没有明确的最佳/正确的方式,但红宝石风格指南似乎更喜欢第一个版本.
@H_404_16@ @H_404_16@