如何在Jenkins Groovy中传递方法?

wqsoz72f  于 2022-10-07  发布在  Jenkins
关注(0)|答案(1)|浏览(216)

下面是脚本管道中的Jenkins groovy代码,我们用它来传递方法

def dict = [:]
def register(String x, Closure y){ dict[x]=y }

我们说register('a', this.&foo)将一个方法传递给register(),接受闭包作为第二个参数

其中foo()是一种方法

def foo(parm){
   // do something with parm
}

其中,parm的可能值为‘a’

为了避免传递this.&foo而调用register('a', foo)register方法的第二个参数类型应该是什么?

nukf8bse

nukf8bse1#

如果要调用register('a', foo),则foo必须是闭包,如

def foo = {
    // closure body here
}

而不是

def foo() {
    // method body here
}

构造this.&foo称为方法指针运算符,用于将方法转换为闭包。如果foo必须保留为方法,那么您无法避免this.&foo运算符。Groovy不支持将方法作为foo传递。另一方面,您的register方法需要一个闭包作为第二个参数,因此必须选择:

  • foo定义为闭合
  • 或使用this.&foo运算符将foo方法转换为闭包

相关问题