0

我已经花了很长时间试图弄清楚如何做到这一点,我也进行了调查,但我没有找到正确的方法......?

基本上我正在尝试执行以下操作:

types = ['type1','type2']
classes = ['class1','class2']

classes.each do |class|
    types.each do |type|

        template "/files/filename.txt" do
          source "source_file.erb"
          owner "root"
          group "root"
          mode "0440"
          variables({
            :pri_areas => node['area']['#{type}']['#{class}'],
            :rev_areas => node['area']['#{type}']['#{class}']
        })
        end

    end
end

显然,我已经定义了所有属性,所以从前面看一切都很好。我仍然无法设法获得一个带有变量的数组的循环?也许另一种不同的方法?

有什么想法/帮助吗?

非常感谢。

4

1 回答 1

2

您的代码有一些问题需要修复才能正常工作。

起初,class是 Ruby 中的保留关键字,因此不能用作变量名。您应该使用另一个,例如klass.

其次,class(or klass) 以及type循环中已经是字符串。因此,您不需要尝试字符串插值。你可以直接使用这个:

variables({
  :pri_areas => node['area'][type][klass],
  :rev_areas => node['area'][type][klass]
})

您的字符串插值不起作用的原因是 ruby​​ 知道两种不同类型的字符串文字:带有 的字符串"和带有'. 不同之处在于,用 分隔的那些'不允许字符串插值,并且通常不会将内部的任何内容解释为文字写入字符串之外的其他内容。只有在由 分隔的字符串中",您才能执行字符串插值,"#{foo}"并使用转义序列,如\n.

于 2013-10-01T17:04:41.743 回答