groovy - 从 Groovy 中的函数调用闭包的委托(delegate)方法?

标签 groovy delegates closures gradle

在 Gradle 脚本中,我有一个带有委托(delegate)的 Groovy 闭包,并且我在该委托(delegate)上创建了一个函数调用方法,如下所述:

// Simplified example
ant.compressFiles() {
    addFile(file: "A.txt")
    addFile(file: "B.txt")
    addAllFilesMatching("C*.txt", getDelegate())
}

def addAllFilesMatching(pattern, closureDelegate) {
    // ...
    foundFiles.each {
        closureDelegate.addFile(file: it)
    }
}

是否有可能以更漂亮的方式做到这一点,而不必将委托(delegate)传递给函数?例如,是否可以使用新方法以某种方式扩展委托(delegate)?

最佳答案

这可以通过创建一个返回 Closure 的函数来解决。 :

ant.compressFiles() addAllFilesMatching("A.txt", "B.txt", "C*.txt")

Closure addAllFilesMatching(String... patterns) {
    // Calculate foundFiles from patterns...
    return {
        foundFiles.each { foundFile ->
            addFile(file: foundFile)
        }
    }
}

关于groovy - 从 Groovy 中的函数调用闭包的委托(delegate)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17680442/

相关文章:

java - @XmlSeeAlso 也有多个参数

grails - 如何在Grails Controller 中渲染HTML/JavaScript?

c# - 为什么C#事件不能直接订阅其他事件

javascript - 从内部函数中的父作用域访问数组元素

generics - 如何包装nom tag_no_case解析器?

javascript - 我无法让 JavaScript 事件监听器正常工作

groovy - 如何在 Groovy 中递归迭代文件?

groovy - 在 groovy 中转换 Map 的值

C# - 无法在方法内声明委托(delegate)

ios - Swift:如何停止暴露委托(delegate)方法