簡體   English   中英

關閉屬性后執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM