我正在尝试使用Builder :: XMLMarkup来构建一些xml,并且它不断向我的xml添加一个空元素。
为什么要这样做以及如何阻止它?
xml = Builder::XmlMarkup.new
=> <inspect/>
答案 0 :(得分:19)
Builder实现了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!
除外),但这通常会带来轻微的不便。
答案 1 :(得分:3)
如果您仍想查看输出:
xml = Builder::XmlMarkup.new; xml.target!