我如何在groovy中修补函数或方法?

时间:2017-06-06 13:43:34

标签: groovy jenkins-pipeline

我想在一些Groovy代码(Jenkins管道)中修改现有方法,以便在不更改消耗它的代码的情况下扩展其行为。

示例" sh"函数我想做的事情(伪代码):

  old_sh = sh
  def sh (args) {
    print(1)
    old_sh(args)
    print(2)
  } 

1 个答案:

答案 0 :(得分:1)

你可以像metaClass这样实现这一点(注意decorator可以用来装饰任何方法或闭包而不仅仅是sh):

def sh(Map args) {
    println "sh: $args"
}

sh(a: 'A', b: 'B', c: 2)

def decorator = { c, Map args ->
    println 1
    c(args)
    println 2
}

def decoratedSH = decorator.curry(this.&sh)
this.metaClass.sh = decoratedSH

sh(a: 'A', b: 'B', c: 2)