我想知道这两者有什么区别。我在 javascript 上找到了这个 SO 帖子,Delegated yield (yield star, yield *) in generator functions
据我了解,yield*
委托(delegate)给另一个生成器,在另一个生成器停止生成值后,它会继续生成自己的值。
Dart 方面的解释和示例会有所帮助。
最佳答案
yield
它用于从生成器异步或同步发出值。
示例:
Stream<int> str(int n) async* {
for (var i = 1; i <= n; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() {
str(3).forEach(print);
}
输出:1
2
3
yield*
它将调用委托(delegate)给另一个生成器,在该生成器停止生成值后,它会继续生成自己的值。示例:
Stream<int> str(int n) async* {
if (n > 0) {
await Future.delayed(Duration(seconds: 1));
yield n;
yield* str(n - 1);
}
}
void main() {
str(3).forEach(print);
}
输出:3
2
1
关于flutter - Dart 中的 yield 和 yield* 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57492517/