Dart: Generator

 14th December 2020 at 10:16am

Dart 的 generator 分同步和异步。用的是 sync* / async* 关键字,它们使 generator 和 function 区分开来。

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}
Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

这个例子类似于 Python 的 yield from,但 Dart 的语法看起来更好(没有滥用同一个 keyword from):

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}