检查变量类型是哈希还是液体数组

时间:2018-07-06 13:30:49

标签: jekyll liquid

我正在尝试编写某种通用布局,该布局可以将字符串数组的选项哈希作为参数 ,因此您可以执行以下操作:< / p>

option:
    - "<li><b>One:</b> This is</li>"
    - "<li><b>Two:</b> Raw HTML</li>"

或者您可以这样做:

option:
    One: This is
    Two: a mapping

我想同时支持这两种方法的原因是,这是一个公共布局,并且第一个选项已经受 支持,但是我宁愿使用第二个选项,因此我想要一个同时支持两个版本的弃用期。

我在check if a variable is type of string or array in liquid中看到,有一种方法可以确定某物是数组还是字符串,但是数组和散列都具有first属性!重用此功能的一种实用方法可能是检查变量的第一个元素是否具有first属性,如下所示:

{% if site.option.first %}
    {% if site.option.first.first %}
        hash
    {% else %}
        array
    {% endif %}
{% else %}
    Something else!
{% endif %}

但是,这似乎有点笨拙,有点骇人听闻-而且,如果传递了数组数组(即使在这种情况下,“数组数组”不被视为有效输入),它也会给出错误的答案。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

对于您知道不会包含数字的数组,可以使用以下代码:

---
arr:
  - ""
  - "2"
  - three
  - null
hash:
  foo: bar
  baz: null
  "0": 1
string: "a string"
---


nil: {{ page.nil_prop | map: "" | join: "," | size }} # 0
str: {{ page.string | map: "" | join: "," | size }} # 0
hash: {{ page.hash | map: "" | join: "," | size }} # 0
arr: {{ page.arr | map: "" | join: "," | size }} # 3

但是,如果数字潜入您的数组,您将得到Liquid Exception: no implicit conversion of String into Integer

这是Jekyll 3.8上的版本。