在TCL中,可以在運行時獲取方法/過程的代碼,修改它並將其注入。Groovy元編程
這可能在Groovy中嗎?我知道有可能包裝原始方法,但我(不幸地)猜測,在groovy中,方法的來源在運行時不可用,是嗎?
例如:想象一下以下的(不太好)〔實施例
def someMethod() {
//some complex code I don't have the source
println "debug"
//some more complex code
}
如果我現在想改變println
聲明爲log
聲明。我無法替換整個方法,因爲我沒有源代碼,或者不想冒着在下一個版本中不同的風險,因此我會用舊的代碼覆蓋它。
對Jayan的感謝我現在意識到這可能是通過AST轉換來處理的,但是在我看來,它似乎比它應該更復雜。
如果我能打通元編程的源和修改...
行 - 我已經聽到人們說我需要一個解析器來修改它,這就是正是AST給我 - 已解析的代碼。但說實話,我認爲源代碼上的一個簡單的正則表達式通常已經足夠了;-)
您是否檢查過:http://stackoverflow.com/questions/2444907/is-it-possible-to-replace-groovy-method-for-existing-object – Jayan
另一個相關資源:http://www.slideshare .net/ilopmar/metaprogramming-with-groovy – Jayan
@Jayan Thanx。這些資源只顯示AST可用於元編程,而不是源。但是,如果有可能將AST轉換回源,請修改並注入它。 – rdmueller