/**
* 闭包
* 1.闭包指的是函数的运行环境
* 2.闭包可以持有函数的运行环境
* 3.函数内部可以定义函数
* 4.函数内部也可以定义类
* 5.在函数中返回一个函数,被返回的函数可以调用主函数的属性
*/
val string = "HelloWorld"
fun makeFun(): () -> Unit { //返回值为一个无参无返回值的函数
var count = 0
return fun() { //返回一个匿名函数
println(++count)
}
}
fun fibnoacci(): () -> Long { //返回值为一个无参返回值为Long类型的函数
var first = 0L
var second = 1L
return fun(): Long { //返回一个匿名函数
val result = second
second += first
first = second - first
return result
}
}
fun fibnoacci2(): 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(): Boolean = true
}
}
}
fun main(args: Array<String>) {
val x = makeFun()
println("makeFun()调用:")
x()
x()
x()
x()
x()
val y = fibnoacci()
println("fibnoacci()调用:")
println(y())
println(y())
println(y())
println(y())
println(y())
println(y())
println("fibnoacci2()调用:")
for (i in fibnoacci2()) {
if (i > 100) break
println(i)
}
println("add()调用:")
val add5 = add(5)
println(add5(2)) //5+2
println("add2()调用:")
val add7 = add2(7)
println(add7(3)) //7+3
}
fun add(x: Int) = fun(y: Int) = x + y //相加方法
fun add2(x: Int): (Int) -> Int { //此方法与add方法完全一致,是完整版
return fun(y: Int): Int {
return x + y
}
}
Kotlin学习笔记(五十一)闭包
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Kotlin脚本以.kts结尾 HelloWorld.kts 其运行方式可以在命令行中切换到文件所在目录,然后以如...
- 解决实例之间的循环强引用可以通过定义类之间的关系为弱引用或无主引用,以替代强引用,从而解决循环强引用的问题。对于生...