當須要延遲生成值序列時,請考慮使用生成器函數。 Dart具備對兩種生成器功能的內置支持:異步
要實現同步生成器函數,請將函數主體標記爲sync*
,並使用yield
語句傳遞值:async
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);
}
}
複製代碼