如何在Jenkins Groovy中传递方法?

时间:2019-03-13 18:42:15

标签: groovy jenkins-groovy

下面是脚本管道中的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'


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

1 个答案:

答案 0 :(得分:2)

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

def foo = {
    // closure body here
}

代替

def foo() {
    // method body here
}

结构this.&foo被称为method pointer operator,用于将方法转换为闭包。如果foo必须保留方法,那么您就无法避免使用this.&foo运算符。 Groovy不支持将传递方法设为foo。另一方面,您的register方法希望将闭包作为第二个参数,因此必须选择:

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