如何在Dart中与Scala一样使用yield? 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)
我该怎么用飞镖做?
void main() {
var a = [1, 2, 3, 4, 5];
for (var e in a) {
if (e > 2) yield e;
}
}
答案 0 :(得分:7)
Dart和JavaScript具有异步/等待机制。
异步产生值的函数是一个返回Stream的异步函数
Stream<int> str() async* {
// The keyword `async*` means a "generator function" that generates a stream
List<int> a = [1, 2, 3, 4, 5];
for (var e in a) {
if (e > 2) yield e;
}
}
main() async {
await for (var e in str()) {
print(e);
}
}
答案 1 :(得分:3)
for (e <- a if e > 2) yield e
表达式是Scala中的expression。
它求值为一个数组。 Dart没有将其作为直接表达式,但是您可以使函数以几乎相同的方式返回可迭代对象,然后立即调用它们以创建表达式:
var a = [1, 2, 3, 4, 5]
var res = () sync* { for (var v in a) if (v > 2) yield v; } ();
在这里,我介绍一个函数() sync* { for (var v in a) if (v > 2) yield v; }
并立即调用它。该函数返回一个Iterable
。可迭代的元素是主体yield
'ed的值,在这种情况下为3、4和5。