11

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

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

xml = Builder::XmlMarkup.new
=> <inspect/> 
4

2 回答 2

19

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!)的标签,但这通常是一个小小的不便。

于 2012-08-15T14:50:19.000 回答
6

如果您仍想查看输出:

xml = Builder::XmlMarkup.new; xml.target!
于 2013-08-27T08:33:02.150 回答