这是编写Jenkins管道代码的常见模式:
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
}
我不确定如何简单地说出来,但这个闭包是隐式导入的,可以通过它所在的.groovy
文件的文件名来调用。
我称之为:
MyClosure { myarg = 'sdfsdf' }
我不完全确定这是做什么的。它正在执行call(body)
,然后将body
指定为代理人。所以这意味着我通过它的关闭是代表,但不仅仅是所有者?华?我很困惑。
答案 0 :(得分:9)
当它运行时,它正在创建一个空地图(config
)。然后它告诉闭包(body
)首先查看委托,通过将其resolveStrategy设置为常量Closure.DELEGATE_FIRST
来查找属性。然后,它将config
映射指定为正文对象的委托。
现在,当您执行body()
闭包时,变量的范围限定为config
地图,现在为config.myarg = 'sdfsdf'
。
现在,您可以在代码中稍后轻松访问config
中的值地图。
body
是所有者,默认情况下是委托。但是,当您将委托切换为config
并告诉它首先使用委托时,您将获得变量config
的范围。