【问题标题】:Check if variable type is hash or array in liquid检查变量类型是液体中的哈希还是数组
【发布时间】:2018-07-06 13:30:48
【问题描述】:

我正在尝试编写一个有点通用的布局,它可以将 要么 字符串数组 选项哈希作为参数,因此您可以这样做:

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 属性!重用此函数的一种实用方法可能是检查变量 also 的第一个元素是否具有 first 属性,如下所示:

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

但这似乎有点笨拙和有点 hack - 另外,如果传递一个数组数组,它​​会给出错误的答案(即使在这种情况下“数组数组”不被视为有效输入)。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: jekyll liquid


    【解决方案1】:

    对于您知道不包含数字的数组,您可以使用以下内容:

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

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 2017-04-28
      • 2018-11-26
      • 1970-01-01
      • 2017-04-13
      • 2011-07-19
      • 1970-01-01
      • 2019-12-02
      相关资源
      最近更新 更多