当须要延迟生成值序列时,请考虑使用生成器函数。 Dart具备对两种生成器功能的内置支持:异步
要实现同步生成器函数,请将函数主体标记为sync*
,并使用yield
语句传递值:async
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);
}
}
复制代码