2013-12-11 33 views
2

我想编写一个Jekyll过滤器,它将一个列表作为参数,并返回一个不包含重复元素的列表字符串。用于Jekyll的Ruby数组的液体过滤器

我的滤波代码为:

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

但complilation jekyll build失败,因为在功能上arr是NUL。

当我改变输入参数为字符串"[1,2,2,3]",arr是一个正常的字符串。

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

回答

1

液体不接受那样的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 
使用两步骤过程来创建一个数组,然后过程的

实施例