【发布时间】:2015-09-21 23:10:29
【问题描述】:
在 TCL 中,可以在运行时获取方法/过程的代码,对其进行修改并注入回来。
这在 Groovy 中可行吗?我知道可以包装原始方法,但我(不幸地)猜想在 groovy 中,方法的来源在运行时不可用,是吗?
示例:想象以下(不太好)示例
def someMethod() {
//some complex code I don't have the source
println "debug"
//some more complex code
}
如果我现在想将 println 语句更改为 log 语句。我无法替换整个方法,因为我要么没有源代码,要么不想冒险在下一个版本中它会有所不同,因此我会用旧的源代码覆盖它。
感谢 Jayan,我现在知道这可以通过 AST 转换来处理,但在我看来它比应有的复杂。
如果我可以通过元编程获取源代码并对其进行修改...
好的——我已经听到人们说我需要一个解析器来修改它,而这正是 AST 给我的——已经解析过的代码。但老实说,我认为源代码上的简单正则表达式通常就足够了;-)
【问题讨论】:
-
@Jayan Thanx。这些资源仅向我展示了 AST 可用于元编程,而不是源。但是,如果可以将 AST 转换回源,请对其进行修改并注入......
-
您可以为方法提供全新的实现。看来您想阅读“方法源”,然后通过更改 AST 来更改它。这也应该是可能的;请用更好的例子改进你的问题,很快就会有一些好的答案(来自其他人)
-
试图改善我的问题:-)