这个嵌套的 Groovy 语句是如何根据 `timeout()` 的参数解释的?

How is this nested Groovy statement interpreted in terms of the arguments of `timeout()`?

下面的Groovy代码中用到了什么syntax/construct?看起来像是两个语句相互嵌套。

下面代码中timeout()函数的参数是什么?是函数还是保留字?

input(...) 语句是 Groovy“闭包”吗?它是函数的第三个参数 timeout?

    timeout(time: 5, unit: 'MINUTES') {
        input(message: 'Please approve')
    }

以下 timeoutinput 定义将适用于普通 groovy:

def input(Map params){
    println "input $params"
}

def timeout(Map params, Closure c){
    println "timeout $params"    
    c.call()
    println "timeout after"    
}


timeout(time: 5, unit: 'MINUTES') {
    input(message: 'Please approve')
}

输出:

timeout [time:5, unit:MINUTES]
input [message:Please approve]
timeout after