groovy.lang.MissingPropertyException:没有这样的属性:类的所有者:母亲

时间:2016-06-27 04:56:28

标签: groovy closures

我正在处理以下代码:

在'this.owner'中出现异常,这是在出生方法的关闭中。

class Mother {
            int field = 1
            int foo(){
                return 2
            }
            Closure birth(param){
                def local = 3
                def closure = {caller -> [this,field,foo(),local,param,caller,this.owner]} 
                return closure
            }
        }

        Mother m = new Mother();
        closure = m.birth(4);

        context = closure.call(this);
        println context[0].class.name

        assert context[1..4] == [1,2,3,4]
        assert context[5] instanceof Script
        assert context[6] instanceof Mother

        fClosure = m.birth(4);
        sClosure = m.birth(4);
        assert false == fClosure.is(sClosure)

当运行结束时:

  

'this.owner'抓住了groovy.lang.MissingPropertyException:没有这样的   财产:班主:母亲

为什么?

1 个答案:

答案 0 :(得分:0)

一切运作良好,请查看here,尤其是:

  

this对应于定义闭包的封闭类

由于相应的类是Mother并且没有owner字段,也没有定义属性,因此MPE失败。如果在owner类上定义Mother它将运行(并且可能因另一个异常而失败)。