我正在尝试使用 Builder::XMLMarkup 构建一些 xml,它不断向我的 xml 添加一个空元素。
它为什么这样做,我该如何阻止它?
xml = Builder::XmlMarkup.new
=> <inspect/>
最佳答案
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!
),但这通常会带来一些不便。
关于ruby - 为什么 Ruby Builder::XmlMarkup 向 xml 添加检查标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971225/