为什么Ruby Builder :: XmlMarkup将inspect标记添加到xml?

dor*_*emi 11 ruby xml builder

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

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

xml = Builder::XmlMarkup.new
=> <inspect/> 
Run Code Online (Sandbox Code Playgroud)

Fre*_*ung 19

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

假设您正在使用irb(或rails'控制台),当您评估表达式(例如Builder::XmlMarkup.new)时,irb的默认行为是调用inspect它,以便生成要显示给您的字符串.在构建器的情况下,inspect不是通常的ruby inspect方法 - 它会落到method_missing并添加标记.

这只会在交互式玩ruby时发生.你可以做类似的事情

xml = Builder::XmlMarkup.new; false
Run Code Online (Sandbox Code Playgroud)

这里表达式的结果是false如此irb调用inspect,并使您的构建器对象单独使用.

继续这样做可能很尴尬.如果你这样做

xml = Builder::XmlMarkup.new; false
def xml.inspect; target!; end
Run Code Online (Sandbox Code Playgroud)

然后xml仍然是一个构建器对象,在irb检查时显示其内容.您将无法创建被调用的标签inspect(除了使用之外tag!),但这通常是一个小小的不便.


fre*_*oid 6

如果您仍想查看输出:

xml = Builder::XmlMarkup.new; xml.target!
Run Code Online (Sandbox Code Playgroud)