groovy以编程方式创建闭包

时间:2016-02-13 15:47:54

标签: groovy closures

如何以编程方式创建closure

我的意思是不喜欢这个

def closure = { println "hello world" }

但更喜欢这个

Closure cl = new MethodClosure(this, "method")
....

然后调用闭包的不同方法来定义body等。

1 个答案:

答案 0 :(得分:1)

好吧,你的例子实际上并不是以编程方式创建Closure,因为它基本上需要解析并将方法的源代码编译成Closure。 解析是问题所在。以编程方式创建Closure看起来类似于Groovy AST转换的实现;你将操纵代表低级语言结构的对象。在伪代码中......比如IfStatement,ClosureLiteral,MethodCall等。然后你将它编译成对象;基本上是通过源代码解析。这有点像包含查询的String和像Grail的GORM之类的查询构建器之间的区别。

然而,Groovy确实提供了一种简单的方法来使用Eval类在您的示例中执行您正在寻找的内容。这是一个例子:

Closure closure = Eval.me("{ a, b -> a * b }")

assert closure instanceof Closure
assert closure(2, 3) == 6
相关问题