关闭后执行 属性
Execution after closure property
我想在分支到这样的闭包后立即执行代码:
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
的 return 值。
所以目前还不清楚您真正想要的是什么。如果你想
要打印 "Done" 作为 运行 的一部分,只需在之前打印它(但随后
现在和 println "run...
一样。或者你把它
在闭包内部,但它与 println
"then...
.
相同
所以我假设您想链接这些调用。在那种情况下,每个关闭
必须 return 可以链接的东西。例如
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}"
["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
的 return 值。
所以目前还不清楚您真正想要的是什么。如果你想
要打印 "Done" 作为 运行 的一部分,只需在之前打印它(但随后
现在和 println "run...
一样。或者你把它
在闭包内部,但它与 println
"then...
.
所以我假设您想链接这些调用。在那种情况下,每个关闭 必须 return 可以链接的东西。例如
def run(String s) {
println "run ${s}"
return [then: {
println "then ${it}"
return [done: { println "done $it" }]
}]
}
run "123" then "456" done "789"