Groovy中作为参数的Pass方法
有没有一种方法可以在Groovy中将方法作为参数传递,而不必将其封装在闭包中?它似乎与函数有关,但与方法无关。例如,考虑到以下情况:Groovy中作为参数的Pass方法,groovy,functional-programming,closures,Groovy,Functional Programming,Closures,有没有一种方法可以在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是类中的一个方法
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()
它失败,因为类:qux的没有这样的属性: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
的闭包甚至可以使用静态方法!Thanks@epidemian如果函数bar
接受一些参数怎么办?@mrvincenzo我不明白这个问题。在本例中,bar
确实接受一个参数(称为args
)。@epidemian您是对的。对不起,我没有看到森林里的树木