107
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
转载请注明:转载自: AigeStudio » 生成器 侵权必究

本篇为 Dart 官方文档翻译项目 DartCN 的文章 Tour 翻译,在此仅作翻译记录,翻译首稿已提交至 DartCN,如需查阅,请链接至《Dart 开发语言概览》

本文为 Dart 语言概览的一部分,完整章节请查阅 Dart 语言概览

当你需要延迟地生成一连串的值时,可以考虑使用生成器函数。Dart 内置支持两种形式的生成器方法:

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

通过在函数上加 sync* 关键字并将返回值类型设置为 Iterable 来实现一个同步生成器函数,在函数中使用 yield 语句来传递值:

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

实现异步生成器函数与同步类似,只不过关键字为 async* 并且返回值为 Stream:

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

留言

Loading...

发表评论

电子邮件地址不会被公开。 必填项已用*标注