我是靠谱客的博主 谨慎大树,最近开发中收集的这篇文章主要介绍groovy学习历程(第四章:闭包),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

闭包
闭包是一段匿名函数,由lambda表达式派生。

传统方式求解:

 	package groovy
//求1到某个特定的数N之间所有偶数的和
def sum(n) {
    total = 0
    for (int i = 2; i <= n; i += 2) {
        total += i
    }
    total
}

println("sum of even numbers from 1 to 10 is ${sum(10)}")

//求1到某个特定的数N之间所有偶数的积
def product(n) {
    prod = 1
    for (int i = 2; i <= n; i += 2) {
        prod *= i
    }
    prod
}

println("sum of even numbers from 1 to 10 is ${product(10)}")


//求1到某个特定的数N之间所有偶数的平方所组成的集合
def sqr(n) {
    squared = []
    for (int i = 2; i <= n; i += 2) {
        squared << i**2
    }
    squared
}

println("sum of even numbers from 1 to 10 is ${sqr(10)}")

在groovy中,可以有更简洁的写法:

def pickEven(n, block) {
    for (int i = 2; i <= n; i += 2) {
        block(i)
    }
}

pickEven(10, { println(it) })

也可以写成这种形式:

pickEven(10){println(it)}

或者:

pickEven(10){evenNumber ->println(evenNumber)}

都可以。
像之前的求和,求积,可以写成完整的表达式:

//求1到某个特定的数N之间所有偶数的和
total = 0
pickEven(10) { total += it }
println("sum of even numbers from 1 to 10 is ${total}")

//求1到某个特定的数N之间所有偶数的积
total = 1
pickEven(10) { total *= it }
println("sum of even numbers from 1 to 10 is ${total}")

//求1到某个特定的数N之间所有偶数的平方所组成的集合
total = []
pickEven(10) { total << it**2 }
println("sum of even numbers from 1 to 10 is ${total}")

闭包的使用方式

上面的 例子介绍了如何在定义方法调用参数时即时创建闭包,此外,还可以将闭包复制给变量并复用,

package groovy

def totalSelectValues(n, clouse) {
    total = 0
    for (i in 1..n) {
        if (clouse(i)) {
            total += i
            println(total)
        }
    }
    total
}

println("total of even numbers from 1 to 10 is")
println(totalSelectValues(10) {
    it % 2 == 0
})
def isOdd = { it % 2 != 0 }
println("total of odd numbers from 1 to 10 is")
println(totalSelectValues(10,isOdd))


在这个例子中,实现了将闭包作为参数传递,并且在构造器中的闭包进行解析,和直接创建的闭包不同,这种预创建的闭包可以多次调用,实现 了策略模式。

最后

以上就是谨慎大树为你收集整理的groovy学习历程(第四章:闭包)的全部内容,希望文章能够帮你解决groovy学习历程(第四章:闭包)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部