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);
}
}