`brechen` und` weiter` in `forEach` in Kotlin
Kotlin hat sehr schön die Iteration von Funktionen, wie forEach
oder repeat
, aber ich bin nicht in der Lage, um die break
und continue
Betreiber arbeiten mit Ihnen (lokale und nicht-lokale):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
Ziel ist, zu imitieren, üblich Schleifen mit der funktionalen syntax so nahe, wie es sein könnte. War es durchaus möglich, in einigen älteren Versionen von Kotlin, aber ich kämpfen, um zu reproduzieren die syntax.
Könnte das problem sein, einen Fehler mit Etiketten (M12), aber ich denke, dass das erste Beispiel sollte trotzdem funktionieren.
Scheint es mir, dass ich irgendwo gelesen habe über einen speziellen trick/annotation, aber ich konnte nicht finden jede Bezugnahme auf das Thema. Könnte wie folgt Aussehen:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
weiter@label
und break@label
- Funktionen), siehe Verwandte Frage: stackoverflow.com/questions/34642868/... break
und weiter
für die funktionelle loops, oder wenn Sie die Suche nach alternativen Antworten, die genau das tun die gleiche Sache. Das erstere scheint der Fall zu sein, denn Sie lehnte den letzteren. InformationsquelleAutor der Frage voddan | 2015-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten:
Nach Kotlin ist alte Dokumente, sollte es möglich sein, mithilfe von Anmerkungen. Es ist jedoch noch nicht implementiert.
Den Problem für diese Funktionalität ist 3 Jahre alt, also ich denke, es ist nicht behoben.
Ursprüngliche Antwort:
Da Sie ein
(Int) -> Unit
Sie können nicht brechen aus, da der compiler nicht wissen, dass es in einer Schleife.Haben Sie einige Optionen:
Verwenden einer regulären for-Schleife:
Wenn die Schleife ist der Letzte code in der Methode
Sie können
return
um aus der Methode (oderreturn value
wenn es nichtunit
- Methode).Verwenden Sie eine Methode
Erstellen Sie eine benutzerdefinierte wiederholen Sie die Methode, die Methode, die Renditen
Boolean
für die Fortsetzung.InformationsquelleAutor der Antwort Yoav Sternberg
Können Sie Rückkehr aus lambda-Ausdruck imitiert eine
continue
oderbreak
je nach Nutzung.Dies ist in dem Zusammenhang Frage: Wie mache ich eine "Pause" oder "fortsetzen", wenn Sie in eine funktionelle Schleife in Kotlin?
InformationsquelleAutor der Antwort Jayson Minard
Druckt 1 bis 5. Die
return@forEach
wirkt wie das Schlagwortcontinue
in Java, das heißt in diesem Fall, führt Sie immer noch jede Schleife springt zum nächsten iteration, wenn der Wert größer als 5.Dadurch wird Druck von 1 bis 10, sondern überspringt die 5.
Versuchen, Sie auf Kotlin Spielplatz.
InformationsquelleAutor der Antwort s-hunter