我想在一些Groovy代码(Jenkins管道)中修改现有方法,以便在不更改消耗它的代码的情况下扩展其行为。
示例" sh"函数我想做的事情(伪代码):
old_sh = sh
def sh (args) {
print(1)
old_sh(args)
print(2)
}
答案 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)