Как вернуться из цикла forEach в Dart? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть эта функция

  bool nameExists(players, player) {
    players.forEach((f) {
      if (f.data['name'].toLowerCase() == player.toLowerCase()) {
        return true;
      }
    });

    return false;
  }

Он всегда возвращает false, даже если условие выполнено.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Нет способа вернуть значение из forEach.Просто используйте петлю for.

  bool nameExists(players, player) {
    for(var f in players) {
      if (f.data['name'].toLowerCase() == player.toLowerCase()) {
        return true;
      }
    }

    return false;
  }
0 голосов
/ 15 мая 2018

Для этого конкретного случая использования вы также можете использовать any() вместо forEach(), например

bool nameExists(players, player) =>
  players.any((f) => f.data["name"].toLowerCase() == player.toLowerCase());
0 голосов
/ 14 мая 2018

Я нашел это другое ТАК:

Как остановить .forEach () Дартса?

В нем один из ответов гласит:

Dart не поддерживает нелокальные возвраты, поэтому возврат из обратного вызова не нарушит цикл. Причина, по которой он работает в jQuery, заключается в том, что each () проверяет значение, возвращаемое обратным вызовом. Обратный вызов Dart forEach возвращает void.

Я не нашел официальной документации для этого, чтобы предоставить ссылку. Но это имеет смысл, основываясь на похожих вопросах, их ответах и ​​поведении вашего кода.

Также основываясь на других ответах по этой ссылке, вам нужно сделать следующее: Обратите внимание, что он использует цикл for, а не foreach. для функций in как foreach в C # или аналогичных языках.

bool nameExists(players, player) {
  bool result = false;
  for(var f in players) {
    if (f.data['name'].toLowerCase() == player.toLowerCase()) {
      result = true;
      break;
    }
  }

  return result;
}

Или есть примеры других механизмов, которые можно использовать для достижения той же цели в связанной SO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...