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);
}
}
网友评论