ruby - 为什么 Ruby Builder::XmlMarkup 向 xml 添加检查标签?

标签 ruby xml builder

我正在尝试使用 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/

相关文章:

ruby-on-rails - Kaminari和Elasticsearch NoMethodError Rails

ruby-on-rails - 在 ruby​​/rails 中创建线程安全的非删除唯一文件名

xml - 在 GWT 客户端创建 XML 文档

java - Java 的 nBuilder 替代品

Java:如何处理 "almost"不可变数据结构?

ruby - 如何反转散列,维护重复键

Javascript 从 REST 循环遍历 XML

c# - .Net 框架更新后 EncryptedXml DecryptDocument 方法错误

c# - 从 Firefox 扩展到 C# 应用程序的通信

ruby - 遍历ruby中的多维哈希