Dart基础之生成器

971 阅读1分钟

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

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

要实现同步生成器函数,请将函数主体标记为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);
  }
}