一、闭包
闭包目前非常火,因为闭包的出现,现在支持函数式编程就不再是梦想了。
二、什么是闭包
1.函数的运行环境
2.持有函数运行状态
3.函数内部可以定义函数
4.函数内部也可以定义类
三、来看一下小例子
package net.println.kotlin.chapter5.closure
import java.util.*
/**
* @author:wangdong
* @description:
*/
val string = "HelloWorld"
/**定义一个函数*/
fun makeFun():() -> Unit{
var count = 0
//返回一个匿名函数,打印一下
return fun(){
println(++count)
}
}
/**再定义个fibonacci方法,斐波拉契序列*/
fun fibonacci(): Iterable<Long>{
var first = 0L
var second = 1L
return Iterable {
object : LongIterator(){
override fun nextLong(): Long {
val result = second
second += first
first = second - first
return result
}
override fun hasNext() = true
}
}
}
fun main(args: Array<String>) {
val x = makeFun()
//每调一次count就会加一
x()
for (i in fibonacci()){
if (i > 100)break
println(i)
}
//第一步add5中x等于13
//第一次传13进来,x=13,返回回去add5中x=13
val add5 = add(13)
//第二步中,y等于56,这个时候,要返回x+y了
//最后13+56=69
println(add5(56))
//69
}
//fun add(x: Int) = fun(y: Int) = x + y
//函数套函数
fun add(x: Int):(Int) -> Int{
//x=13
return fun(y:Int):Int{
//y=56
return x+y
}
//最终69
}
好了,结束了!