我正在尝试使用“method_missing”格式化标签,我想要的结果如下所示。
<foo>\n
<bar>\n
<ab/>\n
</bar>\n
</foo>\n
我认为需要运行索引,但我不清楚最好把它放在哪里,或者这是否是最好的方法。我将如何添加缩进?
def method_missing(meth, *args, &block)
if args.length > 0
my_other_method(args)
else
my_method(meth.to_s, &block)
end
end
def my_other_method(args)
"<#{args}/>"
end
def my_method(meth)
s = "<#{meth}>\n"
s << "#{_indentation}"
s << yield.to_s << "\n"
s << "#{_indentation}"
s << "</#{meth}>\n"
end
def _indentation
("--" * _level.to_i) # dashes added to more easily infer spacing
end
def _level
caller.rindex {|val| val.scan('my_method')} / 3
end
p foo{bar{baz(:a => "b"){}}}
我得到这个错误的输出(不确定是什么导致了额外的 \n)
<foo>\n
--<bar>\n
----<ab>\n
----</bar>\n
\n
--</foo>\n