这里我有简单的DSL
application {
name "Template application"
}
最初我像这样使用它
def application = new MainForm()
application {
name "Template application"
}
我在与DSL相同的文件中声明application
变量。 (对象MainFrom
具有覆盖方法call
)
现在我决定将我的DSL在同一个文件中移动到某个text
文件中
// application.txt
application {
name "Template application"
}
我的主文件只有一行
evaluate(new File("application.txt"))
但是如何提供评估的背景?因为目前它失败了,因为
Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: application.application() is applicabe for argument types: (application$_run_closure1) values: [application$_run_closure1@5bfa9431]
答案 0 :(得分:1)
作为解决方案,我确实喜欢这个
def application = new MainForm()
Binding binding = new Binding()
binding.setVariable("application", application)
GroovyShell shell = new GroovyShell(binding)
.evaluate(new File("application.txt"))
虽然我不确定它是否可以做得更好