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

Начальная загрузка Jekyll включает файл _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) немедленно присваивает ему значение nil, фактически отбрасывая его. Итак, что это делает?


person djechlin    schedule 11.05.2013    source источник


Ответы (1)


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

Поэтому, если вы хотите вычислить без вывода результата, разумно будет захватить переменную. Хак «затем присвоить nil» — это способ сказать, что нас интересуют побочные эффекты вычисления рендеринга, а не результат. Эти другие assignments сохраняют свои эффекты, даже если переменная выбрасывается.

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

person djechlin    schedule 11.05.2013