【发布时间】:2014-03-07 10:34:52
【问题描述】:
在 gradle 中,您可以将闭包以构建器样式传递给对象本身,如下所示:
// ant is a property. an object.
ant {
// do funky builder stuff
}
如何创建自己的自定义代码以将闭包应用于对象?有没有我需要重写的方法来支持这个?
【问题讨论】:
在 gradle 中,您可以将闭包以构建器样式传递给对象本身,如下所示:
// ant is a property. an object.
ant {
// do funky builder stuff
}
如何创建自己的自定义代码以将闭包应用于对象?有没有我需要重写的方法来支持这个?
【问题讨论】:
您可以覆盖call 运算符。 Groovy 允许您不在闭包参数周围放置圆括号。
class A {
def call(Closure cl) {
print(cl())
}
}
def a = new A();
a {
"hello"
}
打印你好。
【讨论】:
添加到海鸥提到的方式:
使用带闭包的方法:
class MyClass {
def ant (c) {
c.call()
}
}
def m = new MyClass()
m.ant {
println "hello"
}
另一个,使用缺少方法,这在采用闭包的方法的名称方面提供了更大的灵活性(在您的情况下为ant):
class A {
def methodMissing(String name, args) {
if (name == "ant") {
// do somehting with closure
args.first().call()
}
}
}
def a = new A()
a.ant { println "hello"}
【讨论】: