Как пройти методы в Jenkins Groovy? - PullRequest
0 голосов
/ 13 марта 2019

Ниже приведен простой код Jenkins в скриптовом конвейере, который мы используем для передачи методов

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.&foo и скорее вызывать register('a', foo)?

1 Ответ

2 голосов
/ 13 марта 2019

Если вы хотите вызвать register('a', foo), тогда foo должно быть закрытием, например,

def foo = {
    // closure body here
}

вместо

def foo() {
    // method body here
}

Конструкция this.&foo называется оператором указателя метода и используется для преобразования метода в замыкание. Если foo должен оставаться методом, вы не можете избежать оператора this.&foo. Groovy не поддерживает методы передачи как foo. С другой стороны, ваш метод register ожидает закрытия в качестве второго параметра, поэтому необходимо указать параметры:

  • определить foo как закрытие
  • или преобразование foo метода к замыканию с помощью this.&foo оператора
...