gpt4 book ai didi

ruby - 将参数传递给类方法 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 08:19:31 26 4
gpt4 key购买 nike

我是 Jekyll、Ruby 的新手。我正在尝试为 Jekyll 创建自定义插件。到目前为止,我的代码如下。我不明白 Ruby 编译器的行为,现在这段代码不起作用,错误为 undefined method scan , 但如果我把所有东西都放在 parseinitialize而不是 parse(text) ,然后它开始工作。

完整错误:Liquid Exception: undefined method 'scan' for #<Liquid::Tokenizer:0x005577b047a220> in index.html

module Jekyll
class CreatePicTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
parse(text)
end

def parse(text)
pattern = /(?<=\[).+?(?=\])/
@class = text.scan(pattern)[0]
@alt = text.scan(pattern)[1]
@path = text.scan(pattern)[2]
end
end
end

最佳答案

if I place everything from parse to initialize instead of parse(text), then it starts working

如果您不能将一些简单的代码提取到一个方法中,则一定有其他事情正在发生。

在这种特定情况下,您将覆盖 Liquid 的内置 parse方法。此方法是在内部调用的,因此您看到的错误是由 Liquid 引起的,而不是由您自己调用引起的。除非你试图改变 Liquid 的解析,否则你不应该自己实现该方法。 Liquid 需要这种方法才能正常工作。

最简单的解决方法是简单地重命名您的方法,例如:

require 'liquid'

class CreatePicTag < Liquid::Tag
def initialize(tag_name, text, tokens)
super
parse_text(text)
end

def parse_text(text)
pattern = /(?<=\[).+?(?=\])/
@class = text.scan(pattern)[0]
@alt = text.scan(pattern)[1]
@path = text.scan(pattern)[2]
end

def render(context)
[@class, @alt, @path].join('|')
end
end

Liquid::Template.register_tag('create_pig', CreatePicTag)
@template = Liquid::Template.parse("{% create_pig [foo][bar][baz] %}")
p @template.render

输出:

foo|bar|baz

关于ruby - 将参数传递给类方法 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49853613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com