Groovy:使用';它';带闭包

Groovy:使用';它';带闭包,groovy,jenkins-pipeline,jenkins-groovy,Groovy,Jenkins Pipeline,Jenkins Groovy,我想知道如何将隐式变量“it”传递给闭包。 请参阅以下代码: def myfunc(String name, Closure cl) { println("name: ${name}") cl.call() } list = ['a', 'b'] list.each { println("it1: ${it}") } list.each { myfunc("f1") { pr

我想知道如何将隐式变量“it”传递给闭包。 请参阅以下代码:

def myfunc(String name, Closure cl)
{
    println("name: ${name}")
    cl.call()
}

list = ['a', 'b']

list.each
{
    println("it1: ${it}")
}

list.each
{
    myfunc("f1")
    {
        println("it2: ${it}")
    }
}

list.each
{
    p ->
    myfunc("f2")
    {
        println("p: ${p}")
    }
}
结果是:

it1: a
it1: b
name: f1
it2: null
name: f1
it2: null
name: f2
p: a
name: f2
p: b
在第二个版本(f1/it2)中,如何将隐式变量
it
传递给闭包?目前为“空”。 我想在第二个版本中实现“it”中包含“a”、“b”

问题的背景是,在Jenkins管道中,以下代码

    mylist = ['a1', 'a2']
    mylist.each {
        dir ("xxxx") {
            echo "it in xxxx is ${it}"
        }
    }

打印出
it
的值'a1'和'a2'。 这不符合
it
绑定到最外层闭包的理解

詹金斯的情况似乎有所不同。 我想达到同样的行为,我想知道如何做到这一点

感谢所有的反馈

致意


来自jenkins的Mathias

dir
不是一个函数-它是jenkins步骤,groovy函数示例不适用

您必须检查它是否可以通过groovy定义的自定义步骤实现

或者考虑一下自定义插件的创建


顺便说一句,这里有一个
dir
jenkins步骤的源代码:

不行,因为有两个嵌套闭包<代码>它是对当前闭包参数的引用,无法访问“父”闭包参数。正如@dagget所说,这是不可能的。然而,我很好奇你想要实现什么。为什么需要合并这些值?如果你能解释一下你的目标,也许这里有人能帮你解决潜在的问题。我已经扩展了我的问题。Jenkins管道中的行为似乎与我在Groovy脚本中得到的行为不同。Jenkins的
dir
不是一个函数-它是Jenkins步骤,Groovy函数示例不适用。您必须检查是否可以通过groovy定义的自定义步骤实现,或者考虑自定义插件的创建。@daggett:谢谢,这回答了我的问题。请你把你的评论作为回答,这样我就可以结束这个话题了。谢谢,我已经扩展了我的问题,提供了更多的背景细节。