dart 函数迭代器
1.同步迭代器
函数命名时要在后面加上sync*,使用yield跳出函数体,返回Iterable类型
main() { for (var item in ceshi(0)) { print(item); } } Iterable<int> ceshi(n) sync* { print("Begin"); while (n < 5) { n = n + 1; yield n; } print("End"); }
2.异步迭代器
函数命名时要在后面加上async*,使用yield跳出函数体,返回Stream类型
main() async{ await for (var item in ceshi(0)) { print(item); } } Stream <int> ceshi(n) async* { print("Begin"); while (n < 5) { n = n + 1; yield n; } print("End"); }
或者
main() { ceshi(0).listen((k)=>print(k)); }
3.yield*
main() { for (var item in ceshi(0)) { print(item); } } Iterable ceshi(int n) sync* { //print("Begin"); if (n <5) { //代表这是一个耗时操作,没有也可以。 yield n; yield* ceshi(n + 1); } //print("End"); }
取消注释跟踪下程序的流程
实际上是个递归操作