为什么 Ruby Builder::XmlMarkup 将检查标记添加到 xml



我正在尝试使用Builder::XMLMarkup来构建一些xml,它不断向我的xml添加一个空元素。

为什么要这样做,我该如何阻止它?

xml = Builder::XmlMarkup.new
=> <inspect/> 
生成器

实现了method_missing的一个版本,该版本添加了由方法调用名称给出的标记。

假设你在irb(

或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!

最新更新