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

 

取消注释跟踪下程序的流程

 

 实际上是个递归操作

 

posted @ 2020-01-28 11:08  富坚老贼  阅读(574)  评论(0编辑  收藏  举报