Groovy:向闭包添加一个方法



我有以下闭包

def closure = {
   println ("closure code")
}

我想添加一个方法。但是如果我尝试

 closure.metaClass.fun = { c->
        c.call();
        println ("extra code");
 }   

我收到一个异常

groovy.lang.MissingPropertyException: No such property: fun for class: org.codehaus.groovy.runtime.metaclass.ClosureMetaClass

读到另一个答案,我也盲目地试图拨打

ExpandoMetaClass.enableGlobally()

但它不起作用。

有办法实现我想要的吗?

你可以做:

def closure = {
    println "closure code"
}
closure.getMetaClass().fun = { ->
    delegate.call()
    println "extra code"
}   
closure.fun()

打印:

closure code
extra code

另一种更简单的方法是:

def closure = {    
    println "closure code" 
}  
closure.fun = { ->  
    closure()
    println "extra code" 
}     
closure.fun()

这种方法的缺点是,我直接引用闭包变量,而不是通过委托。

最新更新