我有以下代码:
trait ContainingClosure {
def method() {
def delegateClass = new DelegateClass()
def closure = {
methodFromDelegate()
}
closure.delegate = delegateClass
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.call()
}
}
class DelegateClass {
def methodFromDelegate() {
println 'methodFromDelegate called'
}
}
class Main implements ContainingClosure {}
new Main().method()
问题是methodFromDelegate()
当我运行方法时找不到它call()
并引发以下异常:
groovy.lang.MissingMethodException: No signature of method: Main.methodFromDelegate() is applicable for argument types: () values: []
有什么合理的解释为什么这个片段在 Grails 2.5.0 (Groovy 2.4.3) 中不起作用?似乎闭包的委托以某种方式被忽略了,并且方法查找是在主类范围内完成的,而不是委托本身。
将特征更改trait
为class
继承并将其实现使此代码再次工作。