【问题标题】:erb idiom to handle undefined variableerb 习惯用法来处理未定义的变量
【发布时间】:2012-10-17 06:03:39
【问题描述】:

我正在尝试编写一些 puppet .erb,如果它是,我想处理这个“环境”变量:

  • 未定义
  • 带有换行符的字符串
  • 一个数组。

我已经做到了:

<% Array(environment).join("\n").split(%r{\n}).each do |f| %>
one line: <%= f %>
<% end %>

但还没有解决未定义的情况。这个我试过了

<% if (defined?(environment)).nil? %?
<% Array(environment).join("\n").split(%r{\n}).each do |f| %>
one line: <%= f %>
<% end %>
<% end %>

但是当尝试像这样测试它时仍然得到“(erb):11: undefined local variable or method `environment' for main:Object (NameError)”:

ruby -rerb -e "environmentUNDEFINEME= [ 'cronvar=cronval', 'var2=val2' ]; 
puts ERB.new(File.read('templates/job.erb')).result"

抱歉,这太简单了,但总得有人问一些简单的问题。有什么帮助吗?

【问题讨论】:

    标签: ruby erb


    【解决方案1】:

    我会这样做:

    <% if defined?(environment) %>
      <% Array(environment).each do |f| %>
      one line: <%= f %>
      <% end %>
    <% end %>
    

    我不明白你为什么加入新行然后又拆分它们,所以我从示例中删除了它。

    【讨论】:

    • 这毫无意义。如果定义了环境,则跳过整个块。
    • 我在换行符上拆分并重新加入,以便我可以同时接受 environment => "foo=bar\nbaz=bam" 和 environment => ["foo=bar", "baz=bam" ]
    • 有效。哦,哈哈,我想我误解了“.nil”?在我的原始代码中。我的问题比我想象的还要愚蠢。我的失败。 :-)
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2021-08-07
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多