當(dāng)您需要延遲生成( lazily produce )一系列值時(shí), 可以考慮使用_生成器函數(shù)_。 Dart 內(nèi)置支持兩種生成器函數(shù):
通過(guò)在函數(shù)體標(biāo)記 sync*, 可以實(shí)現(xiàn)一個(gè)同步生成器函數(shù)。 使用 yield 語(yǔ)句來(lái)傳遞值:
Iterable<int> naturalsTo(int n) sync* {
int k = 0;
while (k < n) yield k++;
}
通過(guò)在函數(shù)體標(biāo)記 async*, 可以實(shí)現(xiàn)一個(gè)異步生成器函數(shù)。 使用 yield 語(yǔ)句來(lái)傳遞值:
Stream<int> asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) yield k++;
}
如果生成器是遞歸的,可以使用 yield* 來(lái)提高其性能:
Iterable<int> naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
有關(guān)生成器的更多信息,請(qǐng)參考文章 Dart Language Asynchrony Support: Phase 2 .
更多建議: