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

Jekyll 检查变量类型是哈希还是数组,jekyll,liquid,Jekyll,Liquid,我正在尝试编写一个有点通用的布局,它可以将字符串数组或选项散列作为参数,因此您可以: option: - "<li><b>One:</b> This is</li>" - "<li><b>Two:</b> Raw HTML</li>" 我想要支持这两个选项的原因是,这是一个公共布局,并且第一个选项已经得到支持,但是我更喜欢使用第二个选项,所以我想要一个两个版本都支持的弃用期 我看到有

我正在尝试编写一个有点通用的布局,它可以将字符串数组或选项散列作为参数,因此您可以:

option:
    - "<li><b>One:</b> This is</li>"
    - "<li><b>Two:</b> Raw HTML</li>"
我想要支持这两个选项的原因是,这是一个公共布局,并且第一个选项已经得到支持,但是我更喜欢使用第二个选项,所以我想要一个两个版本都支持的弃用期

我看到有一种方法可以确定某个东西是数组还是字符串,但数组和哈希都有
first
属性!重复使用此函数的一种实用方法可能是检查变量的第一个元素是否也具有
first
属性,如下所示:

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

但这似乎有点笨拙,有点黑客——而且如果传递数组数组,它将给出错误的答案(即使在这种情况下,“数组数组”不被视为有效输入)。有更好的方法吗?

对于您知道不包含数字的阵列,您可以使用以下方法:

---
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
但是,如果一个数字潜入数组,您将得到
液体异常:字符串没有隐式转换为整数

这是杰基尔3.8的节目

---
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