Ответ 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!
), но это, как правило, небольшое неудобство.