привести пример в дартс - PullRequest
0 голосов
/ 13 октября 2018

Как использовать урожайность в 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)

Как мне это сделать в дротике?

void main() {
  var a = [1, 2, 3, 4, 5];

  for (var e in a) {
    if (e > 2) yield e;
  }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Выражение for (e <- a if e > 2) yield e является выражением в Scala.Он оценивает массив.Дарт не имеет этого в качестве прямого выражения, но вы можете сделать функции, которые возвращают итерируемость почти таким же образом, а затем немедленно вызвать их, чтобы создать выражение:

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 ', редактируемые телом, в данном случае 3, 4 и 5.

0 голосов
/ 13 октября 2018

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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...