【发布时间】:2015-07-10 03:57:06
【问题描述】:
假设我有一个这样的 DSL
setup {name = "aDSLScript"}
println "this is common groovy code"
doStuff {println "I'm doing dsl stuff"}
通常会有一个委托类实现“setup”和“doStuff”方法。此外,可以编写通用的 Groovy 代码来执行(println...)。
我正在寻找的是一种分两步执行此操作的方法。在第一步中,只应处理设置方法(println 都不处理)。第二步处理其他部分。
目前,我有两个委派课程。一个实现“设置”,另一个实现“doStuff”。当然,两者都执行 println 语句。
【问题讨论】:
-
一些代码有助于了解您正在尝试什么。
-
没有比您在上面看到的更多的代码了。为了解释上面的 DSL 脚本,我进入了类:SetupProcessor,它实现了一个方法设置。实现 doStuff 的 CoreProcessor。该脚本执行 2 次。第一次,我将已解析脚本 (Script.class) 的委托设置为 SetupProcessor。第二次,我将代理设置为 CoreProcessor:
def cc = new CompilerConfiguration()def core = new CoreProcessor()cc.scriptBaseClass = DelegatingScript.class.namedef script = sh.parse(dslscript)script.setDelegate(core)script.run()