Groovy 什么是闭包,为什么使用闭包?

Groovy 什么是闭包,为什么使用闭包?,groovy,Groovy,groovy中的闭包是什么 为什么要使用此闭包?您是在询问闭包注释参数吗 […]。。。 Groovy中注释的一个有趣特性是,您可以使用闭包作为注释值。因此,注释可以与多种表达式一起使用,并且仍然具有IDE支持。例如,设想一个框架,在该框架中,您希望执行一些基于环境约束的方法,如JDK版本或OS编写以下代码: class Tasks { Set result = [] void alwaysExecuted() { result << 1 }

groovy中的闭包是什么


为什么要使用此闭包?

您是在询问闭包注释参数吗

[…]。。。 Groovy中注释的一个有趣特性是,您可以使用闭包作为注释值。因此,注释可以与多种表达式一起使用,并且仍然具有IDE支持。例如,设想一个框架,在该框架中,您希望执行一些基于环境约束的方法,如JDK版本或OS编写以下代码:

class Tasks {
    Set result = []
    void alwaysExecuted() {
        result << 1
    }
    @OnlyIf({ jdk>=6 })
    void supportedOnlyInJDK6() {
        result << 'JDK 6'
    }
    @OnlyIf({ jdk>=7 && windows })
    void requiresJDK7AndWindows() {
        result << 'JDK 7 Windows'
    }
}
类任务{
设置结果=[]
void alwaysExecuted(){
结果=6})
void supportedOnlyInJDK6(){
结果=7&&windows})
作废要求jdk7andwindows(){

结果闭包是一个功能强大的概念,您可以使用它实现各种事情,并允许指定DSL。它们有点像Java(lambdas),但功能更强大,用途更广。您不需要使用闭包,但它们可以使许多事情变得更简单。 由于您没有真正指定一个具体的问题,因此我将向您介绍groovy文档中的startegy模式示例:

将闭包视为一个独立的可执行单元,就像一个方法或函数一样,除了可以像变量一样传递它之外,还可以做很多通常在类中会做的事情

举个例子:你有一个数字列表,你要么想给每个数字加+1,要么想把每个数字加倍,你这么说

 def nums = [1,2,3,4,5]

 def plusone = { item ->
    item + 1
 }  

 def doubler = { item ->
    item * 2
 }

 println nums.collect(plusone)
 println nums.collect(doubler)
这将打印出来

[2, 3, 4, 5, 6]
[2, 4, 6, 8, 10]
因此,您所实现的是将函数和“要做什么”从您所做的对象中分离出来。您的闭包将一个可以传递并由其他方法使用的操作分离出来,这些方法与闭包的输入和输出兼容

我们在示例中所做的是,我们有一个数字列表,并将每个数字传递给一个使用它的闭包。要么加上+1,要么加倍值,然后将它们收集到另一个列表中


这种逻辑为更智能、更简洁地解决问题以及编写更好地表示问题的代码提供了很多可能性。

看来您的搜索不够好,这是一个起点:您能告诉我闭包的需要吗?请参考闭包的一般用法。@cfrick应该注意Groovy闭包并不是严格意义上的闭包;-)我不相信它们是