我正在尝试使用Builder::XMLMarkup来构建一些xml,它不断向我的xml添加一个空元素。
它为什么要这样做,我该如何阻止它?
xml = Builder::XmlMarkup.new
=> <inspect/>
实现了method_missing
的一个版本,该版本添加了由方法调用名称给出的标记。
或rails的控制台)中玩,当你计算一个表达式(如Builder::XmlMarkup.new
)时,irb的默认行为是调用inspect
,以便生成一个字符串来显示给你。在构建器的情况下,inspect
不是通常的 ruby inspect
方法 - 它落入method_missing
并添加标签。
这只会在交互式地玩 ruby 时发生。你可以做这样的事情
xml = Builder::XmlMarkup.new; false
在这里,表达式的结果是false
的,因此 irb 对此调用inspect
,并保留您的构建器对象。
继续这样做可能会很尴尬。如果你这样做
xml = Builder::XmlMarkup.new; false
def xml.inspect; target!; end
然后xml
仍将是一个生成器对象,在 IRB 检查时显示其内容。您将无法创建名为inspect
的标签(使用 tag!
除外),但这通常是一个小麻烦。
如果您仍想查看输出:
xml = Builder::XmlMarkup.new; xml.target!