我正在尝试将erb模板转换为epp (新的公司政策),目前还没有很多关于epp的文档。
以下是我在erb中的内容:
<% filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>它工作得很好!然而,我必须找到epp的等价物。我可以让"each“部分工作,但select方法对我不起作用。
我被难住了!
我试过这样的方法:
<% $filter.select { |$x| $x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>这尤其是$x的'|‘上的错误。
我也试过了:
<% $filter.select |$x| {$x != 'filtertype'}.each |$key, $element| { -%>
<%= $key %>: '<%= $element %>'
<% } -%>但这给了我类似于"Error given a Method call,select():错误的参数数量为1比3“之类的信息。
我尝试移动{}并将其更改为(),但没有成功。
有谁有什么想法吗?
谢谢!
发布于 2017-08-01 16:23:43
正如Dominic Cleal在评论中提到的,select()不是一个傀儡函数,但是filter()是Ruby中的select的等价物。
因此:
给定一个类:
class foo () {
# Some test data.
$filter = {
'filtertype' => 'foo',
'apples' => 1,
'bananas' => 2,
}
# How to declare the ERB template for comparison:
file { '/foo':
ensure => file,
content => template('foo/mytemplate.erb'),
}
# How to declare the EPP template for comparison:
file { '/bar':
ensure => file,
content => epp('foo/mytemplate.epp', {'filter' => $filter}),
}
}ERB文件的内容与问题中给出的完全相同:
<% @filter.select{|x| x != 'filtertype'}.sort.each do |key, element| -%>
<%= key %>: '<%= element %>'
<% end -%>等效EPP文件的内容:
<% | Hash $filter | -%>
<% include stdlib -%>
<% $filter.keys.sort.filter |$k| {$k != 'filtertype'}.each |$k| { -%>
<%= $k %>: '<%= $filter[$k] %>'
<% } -%>注意事项:
1)访问keys和sort函数需要include stdlib。
2)变量名$filter现在与内置的Puppet函数filter()冲突,该函数在语法上没有问题,但令人困惑,因此为清楚起见,您可以考虑将$filter变量重命名为其他名称。
此外,如果您不关心键的排序,那么我可以使用以下命令使您尝试的内容工作:
<% | Hash $filter | -%>
<% $filter.filter |$k| {$k[0] != 'filtertype'}.each |$k, $v| { -%>
<%= $k %>: '<%= $v %>'
<% } -%>另请参阅here,我刚才回答了一个类似的问题。
https://stackoverflow.com/questions/44270544
复制相似问题