【问题标题】:Liquid filter for Ruby arrays with Jekyll使用 Jekyll 的 Ruby 数组的液体过滤器
【发布时间】:2013-12-11 11:21:19
【问题描述】:

我想写一个 Jekyll 过滤器,它接受一个列表作为参数,并返回一个没有冗余元素的列表字符串。

我的过滤代码是:

module Jekyll
    module ArrayToSet
        def array_to_set_string(arr)
            arr.uniq.to_s
        end
    end
end

Liquid::Template.register_filter(Jekyll::ArrayToSet)

使用代码是

{{ [1,2,2,3] | array_to_set_string }}

但是编译jekyll build失败了,因为函数中的arr是nul。

当我将输入参数更改为字符串"[1,2,2,3]" 时,arr 是一个普通字符串。

jekyll 是否禁止过滤器的非字符串参数?

【问题讨论】:

    标签: ruby jekyll liquid


    【解决方案1】:

    Liquid 不接受这样的 Ruby 代码,但是一旦通过其他方式(过滤器或标签)创建了 Ruby 对象,它就可以使用它们。

    所以要么创建一个创建数组的方法,要么接受字符串并在处理之前将它们转换为数组。

    使用两步过程创建数组然后处理的示例:

    module Filter
      def to_array(str)
        str.split(',')
      end
    
      def uniq(arr)
        arr.uniq
      end
    end
    
    >> {{ '1,2,2,3' | to_array | uniq }}
    1 2 3
    

    当然,您也可以将其全部归为一种方法:

    module Filter
      def to_array_uniq(str)
        str.split(',').uniq
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多