Я бы пошел с нет, ты не можешь.и вам, вероятно, это не нужно.
сначала.Вы являетесь владельцем или делегатом закрытия.если вы напрямую вызываете замыкание, определенное где-то еще, вызов разрешается без вашей помощи строителя.
секунда.тебе действительно нужно это nested()
?Я полагаю, что вы могли бы легко использовать execute nested
вместо
. Вот пример того, что я имею в виду
def nested2 = {
someMethodAtNested2 '3'
println "nested2! - $it"
}
def nested1 = {arg1,arg2->
someMethodAtNested1 '2'
println "nested1! - $arg1"
include nested2, arg2
}
def root = {
someMethodAtRoot '1'
println "root!"
include nested1, 'param1', 'param2'
}
new FooBuilder().build root
class FooBuilder {
void build(Closure closure) {
include closure
}
def include(Closure closure, ...args) {
def clone = closure.clone()
clone.delegate = this
clone.resolveStrategy = Closure.DELEGATE_FIRST
clone(*args)
}
def methodMissing(String name, args) {
println "missing ${name} ${args}"
}
}
в качестве дополнительного примечания, я не думаю, что поддержка строителей - это путь.это может быть полезно для создания строителей в Java.но чистый заводной намного проще.по крайней мере, для строителей с малой и средней сложностью (никогда не писал действительно большой).
вам действительно нужны некоторые знания процесса отправки методов groovy, хотя