Recentemente, eu queria ser capaz de definir propriedades em um objeto em um encerramento sem precisar usar o =
operador.
Isso é o que eu não queria fazer:
closure = {
foo = "abc"
bar = "efg"
}
Isso é o que eu realmente queria fazer:
closure = {
foo "abc"
bar "efg"
}
Para fazer isso, implementei a função methodMissing, vi se aquele objeto tinha a propriedade e, se tiver, configurei essa propriedade.
class MyClosure {
def foo
def bar
def methodMissing(String name, args) {
if(this.properties.containsKey(name)) {
setProperty(name,args)
}
}
}
closure = {
foo "abc"
bar "efg"
}
myClosure = new MyClosure()
closure.delegate = myClosure
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure()
myClosure.properties.each{key,value-> println key + ": " + value}