本节目标
环境
同步生成器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| main(List<String> args) { var it = naturalsTo(5).iterator; while(it.moveNext()) { print(it.current); } }
Iterable<int> naturalsTo(int n) sync* { print('start'); int k = 0; while (k < n) { yield k++; } print('end'); }
|
yield 会等待 moveNext
指令
异步生成器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import 'dart:async';
main(List<String> args) {
StreamSubscription subscription = asynchronousNaturalsTo(5).listen(null); subscription.onData((value) { print(value); }); }
Stream<int> asynchronousNaturalsTo(int n) async* { print('start'); int k = 0; while (k < n) { yield k++; } print('end'); }
|
以流的方式一次性推送
StreamSubscription
对象进行流监听控制
递归生成器
1 2 3 4 5 6 7 8 9 10 11 12 13
| main(List<String> args) { var it = naturalsDownFrom(5).iterator; while(it.moveNext()) { print(it.current); } }
Iterable<int> naturalsDownFrom(int n) sync* { if ( n > 0) { yield n; yield* naturalsDownFrom(n-1); } }
|
yield*
以指针的方式传递递归对象,而不是整个同步对象
代码
参考
© 猫哥
https://ducafecat.tech
邮箱 ducafecat@gmail.com / 微信 ducafecat / 留言板 disqus