生成器

2020-02-03 23:43 更新

當(dāng)您需要延遲生成( lazily produce )一系列值時(shí), 可以考慮使用_生成器函數(shù)_。 Dart 內(nèi)置支持兩種生成器函數(shù):

  • Synchronous 生成器: 返回一個(gè) Iterable 對象。
  • Asynchronous 生成器: 返回一個(gè) Stream 對象。

通過在函數(shù)體標(biāo)記 sync*, 可以實(shí)現(xiàn)一個(gè)同步生成器函數(shù)。 使用 yield 語句來傳遞值:

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

通過在函數(shù)體標(biāo)記 async*, 可以實(shí)現(xiàn)一個(gè)異步生成器函數(shù)。 使用 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);
  }
}

有關(guān)生成器的更多信息,請參考文章 Dart Language Asynchrony Support: Phase 2 .

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號