Closure.delegate不适用于包含methodMissing方法的对象吗?

时间:2018-08-09 02:16:40

标签: groovy

我的测试代码如下:

#!/usr/bin/env groovy

class Inner {
    def methodMissing(String name, args) {
        println "inner:${name}"
    }
}

def foo = {
    bar()
}

foo.delegate = new Inner()
foo.call()

它给出结果:

inner:bar

如果我添加另一个methodMissing方法,就像这样:

#!/usr/bin/env groovy

class Inner {
    def methodMissing(String name, args) {
        println "inner:${name}"
    }
}

// This method is added
def methodMissing(String name, args) {
    println "outer:${name}"
}

def foo = {
    bar()
}

foo.delegate = new Inner()
foo.call()

它给出结果:

outer:bar

为什么?我将委托设置为闭包“ foo”。为什么不内在。 methodMissing叫吗?

1 个答案:

答案 0 :(得分:0)

this doc中,我相信您将要更改分辨率策略。我添加了Program Files (x86)和一些断言来说明行为的对比:

dark.exe