[英]Execution after closure property
我想在分支到這樣的閉包后立即執行代碼:
def run(String s) {
println "run ${s}"
["then": { input ->
println "then ${input}"
}]
//println "Done"
}
run "123" then "456"
這按預期工作,但是如果我想在關閉后立即運行一些代碼怎么辦?
Fi 如果我取消注釋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 "run...
right now 一樣。或者你把它放在閉包中,但它只是一樣作為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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.