传递方法作为Groovy中的参数
问题描述:
有没有办法在Groovy中将方法作为参数传递,而无需将其封装在闭包中?它似乎与函数一起工作,但不是方法。例如,给出以下:传递方法作为Groovy中的参数
def foo(Closure c) {
c(arg1: "baz", arg2:"qux")
}
def bar(Map args) {
println('arg1: ' + args['arg1'])
println('arg2: ' + args['arg2'])
}
这工作:
foo(bar)
但如果bar
是在一个类中的方法:
class Quux {
def foo(Closure c) {
c(arg1: "baz", arg2:"qux")
}
def bar(Map args) {
println('arg1: ' + args['arg1'])
println('arg2: ' + args['arg2'])
}
def quuux() {
foo(bar)
}
}
new Quux().quuux()
它失败没有这样的属性:酒吧适用于课堂:Quux。
如果我更改了一个封闭包裹bar
的方法,它的工作原理,但似乎不必要的冗长:
def quuux() {
foo({ args -> bar(args) })
}
有一个更清洁的方式?
答
.&
运营商救援!
class Quux {
def foo(Closure c) {
c(arg1: "baz", arg2:"qux")
}
def bar(Map args) {
println('arg1: ' + args['arg1'])
println('arg2: ' + args['arg2'])
}
def quuux() {
foo(this.&bar)
}
}
new Quux().quuux()
// arg1: baz
// arg2: qux
一般而言,obj.&method
将返回一个绑定的方法,即调用上obj
method
的封闭件。