2

我有以下代码:

 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) 中不起作用?似乎闭包的委托以某种方式被忽略了,并且方法查找是在主类范围内完成的,而不是委托本身。

将特征更改traitclass继承并将其实现使此代码再次工作。

4

1 回答 1

1

找到了,就是这个bug

https://issues.apache.org/jira/browse/GROOVY-7456

这是在 groovy 2.4.4 中修复的,所以升级 grails 应该修复它:-)

于 2015-07-31T17:11:44.157 回答