0

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,有效地将其丢弃。那么这有什么作用呢?

4

1 回答 1

3

因为您想要渲染的副作用但不想要渲染的输出。如果捕获,则输出渲染的内容。但是你实际上并不想要输出,所以当你完成时你把它扔掉了。这是一个轻微的黑客攻击。

因此,如果您想在不输出结果的情况下进行计算,那么在变量中捕获是一种合理的做法。“then assign to nil” hack 是一种表示我们对渲染计算的副作用感兴趣的方式,而不是输出。assign即使变量被抛出,其他那些仍然存在的影响仍然存在。

{%include custom/setup %}输出同样会被丢弃,但它的副作用可能很重要。

于 2013-05-11T17:35:10.210 回答