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)
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)
该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。
| 归档时间: |
|
| 查看次数: |
3907 次 |
| 最近记录: |