在 Groovy 中将方法作为参数传递
Posted
技术标签:
【中文标题】在 Groovy 中将方法作为参数传递【英文标题】:Pass method as parameter in Groovy 【发布时间】:2013-02-20 07:50:39 【问题描述】:有没有办法而不将其包装在闭包中?它似乎适用于函数,但不适用于方法。例如,给定以下内容:
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) )
有没有更清洁的方法?
【问题讨论】:
【参考方案1】:.&
运营商来救援!
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
的闭包。
【讨论】:
甚至可以使用静态方法!谢谢以上是关于在 Groovy 中将方法作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章