Что делает захват переменной жидкости с присвоением нулю?

Jekyll bootstrap включает в себя файл _includes/JB/setup:

{% capture jbcache %}
  <!--
  - Dynamically set liquid variables for working with URLs/paths
  -->
  {% if site.JB.setup.provider == "custom" %}
    {% include custom/setup %}
  {% else %}
    {% if site.safe and site.JB.BASE_PATH and site.JB.BASE_PATH != '' %}
      {% assign BASE_PATH = site.JB.BASE_PATH %}
      {% assign HOME_PATH = site.JB.BASE_PATH %}
    {% else %}
      {% assign BASE_PATH = nil %}
      {% assign HOME_PATH = "/" %}
    {% endif %}

    {% if site.JB.ASSET_PATH %}
      {% assign ASSET_PATH = site.JB.ASSET_PATH %}
    {% else %}
      {% capture ASSET_PATH %}{{ BASE_PATH }}/assets/themes/{{ page.theme.name }}{% endcapture %}
    {% endif %}  
  {% endif %}
{% endcapture %}{% assign jbcache = nil %}

Я понимаю, что это 1) захватывает текст как переменную, затем 2) сразу присваивает ему ноль, эффективно отбрасывая его. Так, что это делает?

1 ответ

Потому что вы хотите побочные эффекты рендеринга, но не хотите визуализации вывода. Если вы не захватываете, визуализированный контент выводится. Но на самом деле вам не нужен вывод, поэтому вы его выбрасываете, когда закончите. Это легкий взлом.

Так что, если вы хотите вычислить без вывода результата, захват в переменную - разумная вещь. Хак "затем назначить на ноль" - это способ сказать, что мы заинтересованы в побочных эффектах вычислений рендеринга, а не в результате. Те другие assignЗначения сохраняются, имеют эффекты, которые сохраняются, даже когда переменная выбрасывается.

{%include custom/setup %}Выходные данные также будут выброшены, но его побочные эффекты могут быть важны.

Другие вопросы по тегам