我想在分支到这样的闭包后立即执行代码:
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,因为空值是println
的返回值。
因此,目前尚不清楚您在这里真正想要的是什么。如果你想要在运行中打印“完成”,只需先打印(但随后现在与println "run...
相同。或者你把它在闭包中,但是它与println
"then...
相同。
所以我假设您要链接这些呼叫。在这种情况下,每个关闭必须返回一些要与之关联的东西。例如:
def run(String s) {
println "run ${s}"
return [then: {
println "then ${it}"
return [done: { println "done $it" }]
}]
}
run "123" then "456" done "789"