在创建自定义Jekyll标签时,`tokens` arg用于什么?

时间:2017-02-06 19:13:43

标签: ruby jekyll

杰基尔博士说我们可以create a custom tag

module Jekyll
  class TestTag < Liquid::Tag
    def initialize(tag_name, text, tokens)
      super
      @text = text
      @tokens = tokens
    end
    def render(context)
      "text: #{@text} tokens: #{@tokens}"
    end
  end
end

Liquid::Template.register_tag('test', Jekyll::TestTag)

似乎initialize是一个内置函数,虽然文档没有明确说明。

当我在页面中包含此标记时:

{% test hallo world %}

我明白了:

text: hallo world tokens: {:locale=>#<Liquid::I18n:0x007fd62dbd5e38 
@path=”/Library/Ruby/Gems/2.0.0/gems/liquid-3.0.6/lib/liquid/locales/en.yml”>,
:line_numbers=>true}

这些代币来自哪里?他们在做什么?我可以自己设置令牌吗?

2 个答案:

答案 0 :(得分:3)

这些代币来自何处?

您使用的是super关键字,这意味着它会调用其父类的initialize方法,在本例中为Liquid::Tag,它是构造函数该类的一部分,并创建一个Tag的新实例。

他们做了什么?

tokens argument

  

是存储Liquid选项的哈希。默认情况下   有两个键:: locale和:line_numbers,第一个是Liquid :: I18n   对象,第二个是确定是否有错误的布尔参数   消息应显示发生错误的行号。这个   argument主要用于在Liquid上显示本地化的错误消息   内置标签和过滤器。

答案 1 :(得分:1)

使用super keyword定义方法时,告诉解析器在查找路径中查找同名方法。

Liquid::Tag有一个初始化方法,这就是那些令牌最有可能来自的地方。