生成器
优质
小牛编辑
140浏览
2023-12-01
当你需要懒惰地生成一系列的值时,考虑使用一个“生成器函数” (generator function)。Dart 对这类生成器函数有内置的支持:
要实现一个同步的生成器函数,使用 sync* 标记函数体,并使用 yield 语句传递值:
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
要实现一个异步的生成器函数,使用 async* 标记函数体,并使用 yield 语句传递值:
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
如果你的生成器是递归的,可以使用 yield* 增进它的性能:
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}