一、闭包与基本类型结合使用(闭包实现循环):
/**
* 闭包与基本类型结合使用
* 举例:实现阶乘 10!
*/
//使用循环: 传统方法
int sum1 = 1
for (i = 1; i < 6; i++) {
sum1 *= i
}
println("sum1 = " + sum1)
//使用循环: groovy用法
int sum2 = 1
for (i in 1..5) {
sum2 *= i
}
println("sum2 = " + sum2)
//使用循环: groovy闭包用法
int sum3 = 1
1.upto(5, { num -> sum3 *= num })
println("sum3 = " + sum3)
int sum4 = 1
5.downto(1, { num -> sum4 *= num })
println("sum4 = " + sum4)
int sum5 = 1
5.downto(1) { num -> sum5 *= num }
println("sum5 = " + sum5)
int sum6 = 0
101.times { num -> sum6 += num }
println("sum6 = " + sum6)
二、闭包与String结合使用
/**
* 闭包与String结合使用
*/
String str = "the 2 and 3 is 5"
//each的遍历
str.each {
String temp -> print temp.multiply(2)
}
println()
//find 查找符合条件的第一个
String str2 = 'the 2 and 3 is 5'
println str2.find {
String s -> s.isNumber()
}
println str2.findAll() {
String s -> s.isNumber()
}
// any
def res = str2.any {
String s -> s.isNumber()
}
println(res)
println str2.every { String s -> s.isNumber() }
println str2.collect { it.toUpperCase() }
三、闭包的三个重要变量:this、owner、delegate
/**
* 闭包的三个重要变量:this、owner、delegate
*/
def scriptClosure = {
println "scriptClosure this: " + this //代表闭包定义处的类
println "scriptClosure owner: " + owner //代表闭包定义处的类或者对象
println "scriptClosure delegate: " + delegate //代表任意对象,默认与owner一致
}
scriptClosure.call()
//定义了一个内部类
class Person {
def classClosure = {
println "classClosure this: " + this //代表闭包定义处的类
println "classClosure owner: " + owner //代表闭包定义处的类或者对象
println "classClosure delegate: " + delegate //代表任意对象,默认与owner一致
}
def say() {
def classClosure = {
println "methodClassClosure this: " + this //代表闭包定义处的类
println "methodClassClosure owner: " + owner //代表闭包定义处的类或者对象