Почему Ruby Builder:: XmlMarkup добавляет тег проверки в xml?
Я пытаюсь создать Builder:: XMLMarkup для создания некоторого xml и он добавляет пустой элемент в мой xml.
Почему он это делает и как его остановить?
xml = Builder::XmlMarkup.new
=> <inspect/>
Ответ 1
Builder реализует версию method_missing, которая добавляет теги, заданные именем вызова метода.
Предполагая, что вы играете на консоли irb (или rails), поведение по умолчанию irb при оценке выражения (например, Builder::XmlMarkup.new) заключается в вызове inspect на нем, чтобы создать строку для показа вам, В случае компоновщика inspect не является обычным рубиновым inspect - он проходит до method_missing и добавляет тег.
Это произойдет только при интерактивном воспроизведении рубина. Вы можете делать такие вещи, как
xml = Builder::XmlMarkup.new; false
Здесь результат выражения false, поэтому irb вызывает inspect на этом и оставляет объект вашего строителя самостоятельно.
Это может быть неудобно продолжать делать это постоянно. Если вы делаете
xml = Builder::XmlMarkup.new; false
def xml.inspect; target!; end
то xml все равно будет объектом-строителем, отображающим его содержимое при проверке irb. Вы не сможете создавать теги под названием inspect (кроме использования tag!), но это, как правило, небольшое неудобство.