Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 如何从Dart中的forEach循环返回?_For Loop_Dart - Fatal编程技术网

For loop 如何从Dart中的forEach循环返回?

For loop 如何从Dart中的forEach循环返回?,for-loop,dart,For Loop,Dart,我有这个功能 bool nameExists(players, player) { players.forEach((f) { if (f.data['name'].toLowerCase() == player.toLowerCase()) { return true; } }); return false; } 即使条件满足,它也总是返回false 有什么想法吗?我发现另一个是这样的: 其中一份答复说: Dart不

我有这个功能

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

    return false;
  }
即使条件满足,它也总是返回false

有什么想法吗?

我发现另一个是这样的:

其中一份答复说:

Dart不支持非本地返回,因此从回调返回不会中断循环。它在jQuery中工作的原因是each()检查回调返回的值。Dart forEach回调返回void

我还没有找到这方面的官方文件来提供链接。但基于类似的问题、答案和代码的行为,它是有意义的

此外,根据该链接中的其他答案,您需要执行以下操作: 注意,它使用“for in”循环而不是foreach。对于作为foreach in C#或类似语言函数的in函数

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中实现相同的目标。

无法从
forEach
返回值。 只需为循环使用

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

    return false;
  }

对于这个特定用例,您还可以使用
any()
而不是
forEach()
,例如

bool nameExists(players, player) =>
  players.any((f) => f.data["name"].toLowerCase() == player.toLowerCase());

forEach
是一种非返回型函数的无效方法。因此,您应该使用
map
而不是
forEach
forEach
它只是按迭代顺序应用集合的每个元素。但是,
map
函数在迭代后返回对象

你可以这样使用它

  bool nameExists(players, player) {
    players.forEach((f) {
      if (player.name == "Tony") {
        return true;
      }
    });

    return false;
  }

除此之外,Dart样式指南专门使用
for
循环覆盖
forEach
,除非您可以重用现有函数。那么“Dart不支持非本地返回,因此从回调返回不会中断循环”这句话呢??这是老消息,不再适用吗?或者只适用于foreach循环?当然可以,但问题中似乎要求断开循环并返回值。您从中复制的示例不使用
foreach
。相反,它们使用
for
while
循环。示例代码中的
中断
在语法上是不允许的。啊,我明白你的意思了。他们实际上将foreach更改为for循环。有趣的是,您甚至不能对foreach使用break命令。我已经更新了答案使用
map
而不是
foreach