Groovy中作为参数的Pass方法

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是类中的一个方法

有没有一种方法可以在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()
它失败,因为类: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您是对的。对不起,我没有看到森林里的树木