簡體   English   中英

Groovy:向閉包添加方法

[英]Groovy: add a method to a closure

我有以下關閉

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()

這種方法的缺點是我直接引用了閉包變量,而不是通過委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM