在Groovy 2.4.3中,闭包解决策略无法在特征上下文中工作

时间:2015-07-31 12:28:42

标签: grails groovy closures grails-2.5

我已获得以下代码:

 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)中不起作用?看起来闭包的委托被忽略了,方法查找在Main类范围内完成而不是委托本身。

trait更改为class并将特征实现为继承会使此代码再次运行。

1 个答案:

答案 0 :(得分:1)

发现它,这是这个错误

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

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