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
。