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