2016-11-16 108 views
2

我無法理解爲什麼我的下面的代碼部分失敗。我嘗試爲Jekyll創建Liquid標籤。當設置類成員「text」時,成員「xyz」根本沒有設置。但爲什麼?Ruby:爲什麼我的成員沒有設置初始化?

module MyModule 
    class MyTag < Liquid::Tag 
    def initialize(tag_name, text, tokens) 
     super 
     @text = text 
     @xyz = "HELLO" 
    end 

    def render(context) 
     "Output #{@text} #{@xyz}" 
    end 
    end 
end 

Liquid::Template.register_tag('my_tag', MyModule::MyTag) 

隨着調用上述以下

{% my_tag de 1234 %} 

輸出是:

Output de 1234 

我認爲應該有 「HELLO」,以及像:

Output de 1234 HELLO 

我錯過了什麼?

來自the Liquid class is here的原始碼。

+0

從代碼來看,我預計「輸出去HELLO」,而不是「輸出去1234 HELLO」 。 –

+0

@SergioTulentsev不,它和我上面寫的完全一樣。該論點被視爲完整的字符串。你必須將自己的觀點與Liquid分開(人們說)。 – Christian

+0

如果將「#輸出#{@文本}#{@ xyz}」'更改爲'「輸出#{@ text}'#{@ xyz}'」',會發生什麼? –

回答

2

您的代碼看起來工作正常使用Ruby 2.1.5和液體3.0​​.6:

require 'liquid' 
module MyModule 
    class MyTag < Liquid::Tag 
    def initialize(tag_name, text, tokens) 
     super 
     @text = text 
     @xyz = "HELLO" 
    end 

    def render(context) 
     "Output #{@text} #{@xyz}" 
    end 
    end 
end 

Liquid::Template.register_tag('my_tag', MyModule::MyTag) 

@template = Liquid::Template.parse("{% my_tag de 1234 %}") 
puts @template.render 
#=> "Output de 1234 HELLO" 
+0

我可以確認我有相同的輸出從CLI運行它。與Jekyll結合使用時,它仍然存在問題。 – Christian

相關問題