闭包
闭包
在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
闭包,它接收两个参数x
和y
,并返回它们的和。然后我们定义了一个apply
方法,它接收一个闭包和两个参数,并将这两个参数传递给闭包进行计算,并返回计算结果。
需要注意的是,在Groovy中,闭包可以使用{}
或()
来定义,也可以使用->
来定义,它们的效果是相同的。闭包可以访问其定义范围内的变量,如果需要修改这些变量,需要使用def
关键字来声明变量。此外,Groovy还提供了许多用于集合操作和函数式编程的Closure方法,例如each
、collect
、findAll
、groupBy
、inject
等。