Macros Groovy只能在类和方法上创建宏吗?
在我看来(来自Groovy in Action第二版),Groovy只能将AST作为可能的AST的一个特定子集来操作—类、方法、字段定义等。但是,似乎不可能对任何其他代码段进行注释/操作Macros Groovy只能在类和方法上创建宏吗?,macros,groovy,Macros,Groovy,在我看来(来自Groovy in Action第二版),Groovy只能将AST作为可能的AST的一个特定子集来操作—类、方法、字段定义等。但是,似乎不可能对任何其他代码段进行注释/操作 这个观察正确吗 为什么会这样?这就是为什么我不能注释任何表达式 是否有计划允许至少对闭包进行注释 例如,我想做这样的事情 def some_method() { @with_resource(my_resource) { // do something } } 使用类,您可以
def some_method() {
@with_resource(my_resource) {
// do something
}
}
使用类,您可以检测闭包并执行您想要修改它的任何操作。这是一个
AST允许您修改代码中的任何内容,并允许您构建功能强大的工具。浏览手术室并亲自查看
编辑:我们讨论的是注释,而不是纯AST,这里有一个附录
不能对代码块(或闭包)进行注释,这不是Groovy AST的限制,这是Java的限制,因为注释的目标仅限于这些
你能做的是:
def some_method(@with_resource(my_resource) Closure cl) {
cl.call()
}
不,您还可以对属性和脚本变量进行注释。在我的脑海中,
@Lazy
和@Field
是两个例子。同样,这需要一个方法作为输入。我想在一个方法中转换一个闭包。请给出一个你认为你不能做的例子。我想我并没有真正理解您的观点,因为您在介绍它时,我认为我的_资源被认为是一个方法调用,而不是闭包本身。ASTTransformation可以做任何您想做的事情,但是注释仅限于Java所限于的:类、方法和字段等,所谓的my_资源只是指应该操作的资源。只需假设给定给@with_资源的块将打开一个数据库连接,在其上执行给定的块,然后再次关闭它,并将所有内容包装到一个try-catch块中