の「本体」は、myFunction実際にはタイプの3番目のパラメーターですClosure。宣言すると、実際には3つのパラメーター、、、arg1およびarg2本体を含むもう1つのパラメーターが含まれます。
代理人と一緒にmyFunctionボディクロージャーを呼び出します。デリゲートは、status.successおよびstatus.failureイベントハンドラクロージャを保持します。次に、非同期操作を実行して結果をキャプチャします。最後に、適切な結果ハンドラクロージャを呼び出します。このような関数のスケルトンは次のようになります。
def myFunction(arg1, arg2, Closure body) {
def delegateMap = [status:[:]]
body.delegate = delegateMap
body.call()
// start async process
Thread.start {
def result = doAsyncStuff()
if (isSuccess(result) && delegateMap.status.success) {
delegateMap.status.success.call(result)
}
else if (isFailure(result) && delegateMap.status.failure) {
delegateMap.status.failure.call(result)
}
}
}