Я понимаю, что делегирование сначала работает с владельцем по умолчанию, иначе требуется конкретное делегирование. Я не могу понять, как работает делегация с вложенными замыканиями.
Мой пример:
class App1 {
String bar = "App1"
}
class App2 {
Closure c1 = {
String bar = "App2"
println("Closure 1 - $bar")
Closure c2 = {
println("Closure2 - $bar")
}
c2.delegate = new App1()
c2.resolveStrategy = Closure.DELEGATE_ONLY
c2()
}
}
App2 app2 = new App2()
App1 app1 = new App1()
app2.c1.delegate = app1
app2.c1()
println("***************")
app2.c1.resolveStrategy = Closure.DELEGATE_ONLY // Delegation strictly to
app2.c1()
Фолловинг - это результат
Closure 1 - App2
Closure2 - App2
***************
Closure 1 - App2
Closure2 - App2
То, что не имеет смысла для меня, это с последней напечатанной строкой. Даже после делегирования Closure c2 в App1 с DELEGATE_ONLY, почему он рассматривает bar = "App2"?!