我有以下关闭
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()
但它不起作用。
有没有办法实现我想要的东西?
答案 0 :(得分:6)
你可以这样做:
def closure = {
println "closure code"
}
closure.getMetaClass().fun = { ->
delegate.call()
println "extra code"
}
closure.fun()
打印哪些:
closure code
extra code
答案 1 :(得分:2)
另一种更简单的方法可能是:
def closure = {
println "closure code"
}
closure.fun = { ->
closure()
println "extra code"
}
closure.fun()
这种方法的缺点是我直接引用了闭包变量,而不是通过委托。