kotlin 的协程是一个很有用的可避免阻塞的廉价的底层操作。
本文就使用一下 sequence yield,来体验一下。
Yields a value to the [Iterator] being built.
生成一个正在构建的迭代器的值。
public abstract suspend fun yield(value: T)
我们先写一个函数
val fabonacci = buildSequence{
yield(1) //把一个值建立在迭代器中
var cur = 1
var next = 1
while (true){
yield(next) //把第二个值写入迭代器
//计算下一个神奇数列数字
val tmp = cur + next
cur = next
next = tmp
}
}
在 main 中调用的时候,可以控制输出的条件,不然这个数列会一直写下去的。
fun main(args: Array<String>) {
for (i in fabonacci){
if (i > 100) break
println(i)
}
}
如果当前的数列值已经大于 100 了,就停止输出,跳出循环。
我们输出的这些值是什么呢?就是 fabonacci 里的 "next" 。
运行结果是
1
1
2
3
5
8
13
21
34
55
89