美文网首页
dart语法10-生成器

dart语法10-生成器

作者: jxtx | 来源:发表于2020-05-16 17:05 被阅读0次

dart语法1
dart语法2-内置类型
dart语法3-函数
dart语法4-操作符
dart语法5-异常
dart语法6-类
dart语法7-泛型
dart语法8-库
dart语法9-异步
dart语法10-生成器
dart语法11

生成器

同步生成器

使用sync*,返回的是Iterable对象。
yield会返回moveNext为true,并等待 moveNext 指令。
调用getSyncGenerator立即返回Iterable对象。
调用moveNext方法时getSyncGenerator才开始执行。

Main(){
  var it = getSyncGenerator(5).iterator;
  while (it.moveNext()) {
    print(it.current);
  }
}

Iterable<int> getSyncGenerator(int n) sync* {
  print('start');
  int k = 0;
  while (k < n) {
    yield k++;
  }
  print('end');
}

异步生成器

使用async*,返回的是Stream对象。
yield不用暂停,数据以流的方式一次性推送,通过StreamSubscription进行控制。
调用getAsyncGenerator立即返回Stream,只有执行了listen,函数才会开始执行。
listen返回一个StreamSubscription 对象进行流监听控制。
可以使用StreamSubscription对象对数据流进行控制。

Main(){
//getAsyncGenerator(5).listen((value) => print(value));
  StreamSubscription subscription = getAsyncNumIterator(5).listen(null);
  subscription.onData((value) {
    print(value);
    if(value>=2){
      subscription.pause();
    }
  });
}

Stream<int> getAsyncGenerator(int n) async* {
  print('start');
  int k = 0;
  while (k < n) {
    yield k++;
  }
  print('end');
}

递归生成器

yield* 以指针的方式传递递归对象,而不是整个同步对象。

Main(){
  var it = getSyncRecursiveGenerator(5).iterator;
  while (it.moveNext()) {
    print(it.current);
  }
}

Iterable<int> getSyncRecursiveGenerator(int n) sync* {
  if (n > 0) {
    yield n;
    yield* getSyncNumDownFrom(n - 1);
  }
}

相关文章

  • dart语法10-生成器

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法速览

    dart语法速览 类与构造 泛型 Factory与私有 生成器 类型别名 异步

  • dart语法7-泛型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法8-库

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法9-异步

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法11

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法2-内置类型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法1

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法3-函数

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法4-操作符

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

网友评论

      本文标题:dart语法10-生成器

      本文链接:https://www.haomeiwen.com/subject/ezrrohtx.html