传递方法作为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将返回一个绑定的方法,即调用上objmethod的封闭件。