无法从实例中使用元类将方法动态添加到Groovy

无法从实例中使用元类将方法动态添加到Groovy,groovy,Groovy,恐怕我是Groovy的初学者,所以这可能非常愚蠢。(使用groovy 2.3.4) 我有以下代码: class Test { public void method() { def methodName = "dynamicMethodName" this.metaClass."$methodName" = {->} this."${methodName}"() } } new Test().method() 运行此操作将

恐怕我是Groovy的初学者,所以这可能非常愚蠢。(使用groovy 2.3.4) 我有以下代码:

class Test {

    public void method() {
        def methodName = "dynamicMethodName"
        this.metaClass."$methodName" = {->}
        this."${methodName}"()
    }
}

new Test().method()
运行此操作将引发以下错误:

Caught: groovy.lang.MissingPropertyException: No such property: dynamicMethodName for class: groovy.lang.MetaClassImpl
    groovy.lang.MissingPropertyException: No such property: dynamicMethodName for class: groovy.lang.MetaClassImpl
at Test.method(what.groovy:5)
at Test$method.call(Unknown Source)
at what.run(what.groovy:10)
有人能帮我找出我做错了什么吗?我还试着不要“太过动态”,并对代码进行了如下修改:

class Test {

    public void method() {
        this.metaClass.dynamicMethodName = {->}
        this.dynamicMethodName()
    }
}

new Test().method()
但我还是犯了同样的错误

更新

如果我通过使用实例引用(而不是使用实例引用)将方法添加到类之外,它似乎可以工作


没有办法从实例本身为实例动态添加方法吗?

事实证明,如果该类扩展了Expando类,它就可以工作


在这里可以找到答案:

或者在调用方法()之前对脚本使用
ExpandoMetaClass.enableglobal()