下面是脚本管道中的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.&foo
,register('a', foo)
方法的第二个参数应该是什么类型?
答案 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
方法转换为闭包