import groovy.xml.MarkupBuilder
class Foo {
Foo() {}
String boo() {
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.records() {
car(name:'HSV Maloo', make:'Holden', year:2006) {
country('Australia')
record(type:'speed', 'Production Pickup Truck with speed of 271kph')
}
}
println writer
}
def methodMissing(String methodName, args) {
println "Get called"
}
}
Foo a = new Foo()
a.boo()
Результат:Groovy перестает работать, когда methodMissing() реализуется
Get called
<records />
Без реализации methodMissing()
, результат:
<records>
<car name='HSV Maloo' make='Holden' year='2006'>
<country>Australia</country>
<record type='speed'>Production Pickup Truck with speed of 271kph</record>
</car>
</records>
Я почесал голову кровотечение прямо сейчас, что же я скучаю Вот?
похоже, внутри затворов, используемых MarkupBuilder, «это» по-прежнему указывает на содержащего класс, так что если methodMissing присутствует, он «скрывает» динамический методы, используемые строителем, поскольку все неизвестные вызовы перенаправляются на «методMi ssing '. Кроме этого, я не могу сказать ... – Grim