Dart中的屈服示例

mad*_*ant 2 functional-programming dart

如何在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)

use*_*240 9

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);
  }
}
Run Code Online (Sandbox Code Playgroud)


lrn*_*lrn 5

for (e <- a if e > 2) yield e表达式是Scala 中的表达式。它的计算结果是一个数组。Dart 没有将其作为直接表达式,但您可以以大致相同的方式创建返回可迭代对象的函数,然后立即调用它们以创建表达式:

var a = [1, 2, 3, 4, 5]
var res = () sync* { for (var v in a) if (v > 2) yield v; } ();
Run Code Online (Sandbox Code Playgroud)

这里我引入一个函数() sync* { for (var v in a) if (v > 2) yield v; }并立即调用它。该函数返回一个Iterable. 该可迭代对象的元素是yield由主体定义的值,在本例中为 3、4 和 5。