Groovys NodeBuilder использует
def someBuilder = new NodeBuilder()
someBuilder.people(kind:'folks', groovy:true) {
person(x:123, name:'James', cheese:'edam') {
project(name:'groovy')
project(name:'geronimo')
}
person(x:234, name:'bob', cheese:'cheddar') {
project(name:'groovy')
project(name:'drools')
}
}
тогда как Rails 'XmlMarkup использует
xm = Builder::XmlMarkup.new
xm.instruct! # <?xml version="1.0" encoding="UTF-8"?>
xm.html { # <html>
xm.head { # <head>
xm.title("History") # <title>History</title>
} # </head>
xm.body { # <body>
xm.comment! "HI" # <! -- HI -->
xm.h1("Header") # <h1>Header</h1>
xm.p("paragraph") # <p>paragraph</p>
} # </body>
} # </html>
Почему с Rails вам нужно использовать явный получатель (xm), тогда как с Groovy вы можете его опустить? Я слышал о неприязни к instance_eval в ruby, почему Groovy может сойти с этого стиля, а ruby - нет?
Спасибо капризный , только что закончил читать эту статью, это превосходный обзор различных методов, которые вы можете использовать для создания DSL в ruby. Я бы проголосовал за вас, но пока нет ни одного представителя.