Grails Groovy 2.4.3中的闭包解析策略在trait上下文中不起作用

Grails Groovy 2.4.3中的闭包解析策略在trait上下文中不起作用,grails,groovy,closures,grails-2.5,Grails,Groovy,Closures,Grails 2.5,我有以下代码: trait ContainingClosure { def method() { def delegateClass = new DelegateClass() def closure = { methodFromDelegate() } closure.delegate = delegateClass closure.resolveStrategy = Closure.DELEGATE_

我有以下代码:

 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()
问题是,当我运行
call()
方法时,找不到
methodFromDelegate()
,并引发以下异常:

groovy.lang.MissingMethodException: No signature of method: Main.methodFromDelegate() is applicable for argument types: () values: []
有没有合理的解释来解释为什么这个代码段不能在Grails2.5.0(Groovy 2.4.3)中工作?似乎在某种程度上忽略了闭包的委托,方法查找是在主类范围内完成的,而不是委托本身


trait
更改为
class
并将trait实现为继承,使此代码再次工作。

找到它,就是这个bug


这在groovy 2.4.4中是固定的,因此grails的升级应该可以解决它:-)

将代码粘贴到groovy 2.4.4的groovy控制台工作得很好,这在groovy 2.4.3中是固定的(在2.4.4中是固定的)。。。我认为在Grails更新ups和Groovy versionI能够确认这一点之前,您需要一个解决方案。迁移到Grails2.5.1解决了这个问题,因为它使用Groovy 2.4.4,正如您所说的那样工作。@tim_yates您应该将其作为答案发布:-)