避免烂尾,先开坑。
初略看了下Stream API,应该是一个很深的坑。Stream实现了类似于Rx的许多API,估计过年在家要好好读读文档了。
本打算只写关于Stream
的东西,后面翻了一下文档,发现Stream
与Iterable
的API大致相同,唯一的区别在于Iterable
是同步的,而Stream
是异步的,它们的定义形式,类似于JavaScript下的生成器,而实际上,在Dart中,也将二者统称为生成器。
- 定义
Iterable
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
- 定义
Stream
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
- 递归生成器
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}