Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 闭包后执行属性_Groovy_Closures_Dsl - Fatal编程技术网

Groovy 闭包后执行属性

Groovy 闭包后执行属性,groovy,closures,dsl,Groovy,Closures,Dsl,我希望在分支到闭包后立即执行代码,如下所示: def run(String s) { println "run ${s}" ["then": { input -> println "then ${input}" }] //println "Done" } run "123" then "456" 这就像预期的那样工作,但是如果我想在关闭后立即运行一些代码呢 F.i.如果我取消注释行println“Done”,我会得到一个NullPoint

我希望在分支到闭包后立即执行代码,如下所示:

def run(String s) {
    println "run ${s}"
    ["then": { input ->
        println "then ${input}"
    }]
    //println "Done"
}

run "123" then "456"
这就像预期的那样工作,但是如果我想在关闭后立即运行一些代码呢

F.i.如果我取消注释行
println“Done”
,我会得到一个NullPointerException

我有点理解为什么会这样,有没有办法呢

编辑 多亏了cfrick,这就是我想要做的,它现在起作用了

result = ["then": { input...
// Do my stuff here
return result


让我们把它稍微分离一下,写得更清楚:

def run(String s) {
    println "run ${s}"
    return ["then": { input -> println "then ${input}" }]
}

run("123").then("456")
因此,如果我们取消注释
println
,这将更改为:

def run(String s) {
    println "run ${s}"
    // this now is just a no-op
    ["then": { input -> println "then ${input}" }]
    return println("Done")
}
获取NPE是因为null是
println
的返回值

所以现在还不清楚你到底想要什么。如果你愿意 要将“完成”作为运行的一部分进行打印,只需在之前(但之后)进行打印即可 这与现在运行…的println是一样的。或者你把它 在闭包内部,但是它与
println一样
“然后…

所以我假设你想把这些电话连起来,在这种情况下,每次闭包 必须将某物退回链条

def run(String s) {
    println "run ${s}"
    return [then: { 
        println "then ${it}"
        return [done: { println "done $it" }]
    }]
}

run "123" then "456" done "789"

让我们把它稍微分离一下,写得更清楚:

def run(String s) {
    println "run ${s}"
    return ["then": { input -> println "then ${input}" }]
}

run("123").then("456")
因此,如果我们取消注释
println
,这将更改为:

def run(String s) {
    println "run ${s}"
    // this now is just a no-op
    ["then": { input -> println "then ${input}" }]
    return println("Done")
}
获取NPE是因为null是
println
的返回值

所以现在还不清楚你到底想要什么,如果你想要的话 要将“完成”作为运行的一部分进行打印,只需在之前(但之后)进行打印即可 这与现在运行…的println是一样的。或者你把它 在闭包内部,但是它与
println一样
“然后…

所以我假设你想把这些电话连起来,在这种情况下,每次闭包 必须将某物退回链条

def run(String s) {
    println "run ${s}"
    return [then: { 
        println "then ${it}"
        return [done: { println "done $it" }]
    }]
}

run "123" then "456" done "789"