groovy - 向 Groovy DSL 添加可选子句

标签 groovy dsl

我正在使用 Groovy 开发 DSL,但遇到了以下问题。我有一个方法可以对具有给定参数的对象执行一些操作。

def run(x) {
    [with:{ y -> foo(x,y) }]
}

run "thing" with "param"    // evaluates to foo("thing","param")

现在,假设我想向我的 DSL 添加一个默认功能:

def runDefault(x) {
    foo(x)
}

runDefault "thing"          // evaluates to foo("thing")

有没有办法将两者组合成一个函数,使 with "param" 部分成为可选子句?我希望能够使用如下所示的 DSL:

run "thing" with "param"    // should do foo("thing","param")
run "thing"                 // should do foo("thing")

最佳答案

如果您能够区分运行方法中的两个调用,您可以这样做:

def run(x) {
    switch (x) {
    case 'foo':
        println "foo($x)"; break;
    case 'bar': 
        [with:{ y -> println "bar($x,$y)" }]; break;
    }
}
run "bar" with "param"
run "foo"

关于groovy - 向 Groovy DSL 添加可选子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29660737/

相关文章:

ruby - 为 DSL 翻译 block 和语句

java - 是否有通过 "with"-function 进行对象构造的更常规替代方案

powershell - Jenkins中Powershell脚本中调用参数

sql - 将 DSL 转换为 SQL 的正确工具?

eclipse - 在 Eclipse 中禁用 "Add Xtext nature"对话框

elasticsearch - 嵌套DSL语法中的多个术语

mysql - 如何通过 Groovy sql 字符串调用 SQL 的 now()?

grails - 从Grails服务调用PLSQL存储的proc

grails - 使用 Grails 3 渲染空的 HTTP 响应

php - 将嵌入式脚本添加到 PHP 页面