我想写一个 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 是否禁止过滤器的非字符串参数?
最佳答案
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
关于ruby - 带有 Jekyll 的 Ruby 数组的液体过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517746/