gpt4 book ai didi

groovy - 在 Groovy 中将方法作为参数传递

转载 作者:行者123 更新时间:2023-12-03 07:49:04 28 4
gpt4 key购买 nike

有没有办法在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com