编程语言
833
当你需要懒惰地生成一系列的值时,考虑使用一个“生成器函数” (generator function)。Dart 对这类生成器函数有内置的支持:
要实现一个同步的生成器函数,使用 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); } }