生成器 3个月前

编程语言
833
生成器

当你需要懒惰地生成一系列的值时,考虑使用一个“生成器函数” (generator function)。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);
  }
}
image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223114
累计阅读

热门教程文档

PHP
52小节
CSS
33小节
Python
76小节
爬虫
6小节
Swift
54小节