跳至主要內容

闭包


闭包

在Groovy中,Closure(闭包)是一种类似于匿名函数的概念,它是一段代码块,可以作为参数传递给方法或赋值给变量,并且可以访问并修改其定义范围内的变量。Closure在Groovy中广泛应用于集合操作、函数式编程、事件驱动编程等场景。

以下是一个Groovy中定义和使用Closure的示例:

def square = { x -> x * x }
println(square(2)) // 输出 4

def nums = [1, 2, 3, 4, 5]
def evenNums = nums.findAll { it % 2 == 0 }
println(evenNums) // 输出 [2, 4]

def sum = { x, y -> x + y }
def apply(Closure closure, a, b) {
    closure(a, b)
}
println(apply(sum, 2, 3)) // 输出 5

上面的示例中,我们首先定义了一个square闭包,它接收一个参数x,并返回x的平方。然后我们使用square闭包计算了2的平方,并输出结果。接着,我们定义了一个整数数组nums,并使用findAll方法和一个闭包来筛选出其中的偶数,最后输出结果。最后,我们定义了一个sum闭包,它接收两个参数xy,并返回它们的和。然后我们定义了一个apply方法,它接收一个闭包和两个参数,并将这两个参数传递给闭包进行计算,并返回计算结果。

需要注意的是,在Groovy中,闭包可以使用{}()来定义,也可以使用->来定义,它们的效果是相同的。闭包可以访问其定义范围内的变量,如果需要修改这些变量,需要使用def关键字来声明变量。此外,Groovy还提供了许多用于集合操作和函数式编程的Closure方法,例如eachcollectfindAllgroupByinject等。

上次编辑于:
贡献者: Neil