ECMAScript 6应该带来生成器函数和迭代器.生成器函数(具有function*语法)返回迭代器.迭代器有一个next方法,当重复调用时,它执行生成器函数的主体,在每个yield操作员处重复暂停和恢复执行.
生成器上的ECMAScript 6 wiki还引入了"委托产量" yield*运算符,如下所示:
该
yield*运营商委托给另一发电机.这为组合生成器提供了方便的机制.
"委托给另一台发电机"是什么意思?我怎样才能yield*"方便地组合发电机"?
[您可以使用--harmony-generators标志在Node v0.11.3中使用生成器.]
在 flutter 中,我们使用 StreamBuilder 和接收流 e 给我们一个包含“数据”但也包含“错误”对象的快照对象。
我想用 async* 制作一个产生数据的函数,但由于某些条件,它也会产生一些错误。我怎样才能在 Dart 中实现这一目标?
Stream<int> justAFunction() async* {
yield 0;
for (var i = 1; i < 11; ++i) {
await Future.delayed(millis(500));
yield i;
}
yield AnyError(); <- I WANT TO YIELD THIS!
}
Run Code Online (Sandbox Code Playgroud)
然后,在 StreamBuilder 中:
StreamBuilder(
stream: justAFunction(),
builder: (BuildContext context, AsyncSnapshot<RequestResult> snapshot) {
return Center(child: Text("The error tha came: ${snapshot.error}")); <- THIS SHOULD BE THE AnyError ABOVE!
},
)
Run Code Online (Sandbox Code Playgroud) 如何在Dart中使用与Scala相同的产量?Scala中有一个例子" https://alvinalexander.com/scala/scala-for-loop-yield-examples-yield-tutorial "
scala> val a = Array(1, 2, 3, 4, 5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
scala> for (e <- a if e > 2) yield e
res1: Array[Int] = Array(3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我怎么能用飞镖做?
void main() {
var a = [1, 2, 3, 4, 5];
for (var e in a) {
if (e > 2) yield e;
}
}
Run Code Online (Sandbox Code Playgroud)