我想在我的 DSL 中为规则实现一个“活动”标志。这是我希望它的样子:
Shipping("Standard") {
active: true
description: "some text"
rules {
... define rules here
}
}
以下是我按照几个教程让一切运行的方法:
Script dslScript = new GroovyShell().parse(new File("Standard"))
dslScript.metaClass.Shipping = { String name, Closure cl ->
ShippingDelegate delegate = new ShippingDelegate()
delegate.name = name
cl.delegate = delegate
cl.setResolveStrategy Closure.DELEGATE_FIRST
cl()
}
dslScript.run()
ShippingDelegate 很简单:
class ShippingDelegate {
String name
void rules(Closure cl) {
... do stuff here
}
}
这一切都运行良好,没有投诉,但我怎样才能访问“活动”或“描述”?
无论如何,这种语法实际上做了什么?它看起来像一个地图分配,但没有。还是 groovy 编译器将其视为不完整的三元运算符?