Задать вопрос
@AlexWinner

Ruby/ERB/puppet после сравения в if строка становится nil?

Приветствую!

Следюущая ситуация: пишу erb-темплейт для паппета. Вид такой:
# XMX &lt;%= xmx%&gt;<br/>
# XMX.class &lt;%= xmx.class%&gt;<br/>
&lt;%<br/>
mem = 4096.0<br/>
%&gt;<br/>
# MEM &lt;%= mem%&gt;<br/>
# MEM.classs &lt;%= mem.class%&gt;<br/>
&lt;%<br/>
<br/>
if xmx == &quot;NONE&quot;<br/>
 xmx = (mem * 0.7).to_s<br/>
 %&gt;XMX in if &lt;%= xmx %&gt; &lt;%<br/>
else<br/>
 %&gt;XMX in else &lt;%= xmx %&gt; &lt;%<br/>
end<br/>
%&gt;<br/>
# MEM &lt;%= mem%&gt;<br/>
# MEM.class &lt;%= mem.class%&gt;<br/>
# XMX &lt;%= xmx%&gt;<br/>
# XMX.class &lt;%= xmx.class%&gt;<br/>



Если там, где темплейт используется, определить xmx = «NONE», то всё ок, на выходе получаем:
# XMX NONE<br/>
# XMX.class String<br/>
<br/>
# MEM 4096.0<br/>
# MEM.classs Float<br/>
XMX in if 2867.2<br/>
# MEM 4096.0<br/>
# MEM.class Float<br/>
# XMX 2867.2<br/>
# XMX.class String



Если же определить xmx = «1024», например, то получаем в результате:
# XMX 1024<br/>
# XMX.class String<br/>
<br/>
# MEM 4096.0<br/>
# MEM.classs Float<br/>
XMX in else<br/>
# MEM 4096.0<br/>
# MEM.class Float<br/>
# XMX <br/>
# XMX.class NilClass<br/>



То есть переменная xmx после if получает тип nil. Если же попробовать без if, просто написать где либо xmx == «NONE», то всё хорошо, остается той же строкой.


Прошу подсказать, почему xmx становится nil-ом?
  • Вопрос задан
  • 2861 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lure_of_Chaos
@Lure_of_Chaos
Программист
у вас xmx в одной ветви вычисляется, в другой — нет

<%
if xmx == "NONE"
xmx = (mem * 0.7).to_s
else
end
%>
Ответ написан
UseRifle
@UseRifle
<%
if xmx == «NONE» %>
<%
xmx = (mem * 0.7).to_s
%>

попробуйте так, единственное что на ум приходит, возможно erb криво парсит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы