Dart基础之生成器

当须要延迟生成值序列时,请考虑使用生成器函数。 Dart具备对两种生成器功能的内置支持:异步

  • 同步生成器: 返回一个 Iterable 对象
  • 异步生成器: 返回一个 Stream 对象

要实现同步生成器函数,请将函数主体标记为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);
  }
}
复制代码
相关文章
相关标签/搜索