有没有办法在 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()
失败并显示No such property: bar for class: 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
将返回一个绑定(bind)方法,即在obj
上调用method
的闭包。
关于groovy - 在 Groovy 中将方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231810/