आप return from lambda expression जो एक continue
या break
अपने उपयोग के आधार पर की नकल करता उपयोग कर सकते हैं।
(1..5).forEach {
if (it == 3) [email protected] // mimic [email protected]
// ... do something more
}
और आप और अधिक जटिल जाना और लेबल जब आप घोंसले या भ्रामक स्थितियों होने का उपयोग कर सकते हैं::
यहाँ एक एक उदाहरण नकल उतार continue
है
(1..3).forEach [email protected] { x ->
(1..3).forEach [email protected] { y ->
if (x == 2 && y == 2) [email protected] // mimic [email protected]
if (x == 1 && y == 1) [email protected] // mimic [email protected]
// ... do something more
}
}
आप क्या करना चाहते हैं break
आपको उस लूप के बाहर कुछ चाहिए जो आप वापस कर सकते हैं, यहां हम run()
फ़ंक्शन का उपयोग करने में हमारी सहायता के लिए उपयोग करेंगे:
run [email protected] {
(1..20).forEach { x ->
if (x == 5) [email protected] // mimic [email protected]
// ... do something more
}
}
के बजाय run()
यह let()
या apply()
या कुछ भी स्वाभाविक रूप से आप forEach
कि एक जगह आप से तोड़ने के लिए चाहते हैं आसपास है हो सकता है। लेकिन आप forEach
के बाद उसी ब्लॉक में कोड को भी छोड़ देंगे, इसलिए सावधान रहें।
ये इनलाइन फ़ंक्शंस हैं इसलिए वास्तव में वे वास्तव में ओवरहेड नहीं जोड़ते हैं।
अज्ञात कार्यों सहित सभी विशेष मामलों के लिए Returns and Jumps के लिए कोटलिन संदर्भ दस्तावेज़ पढ़ें।
@Test fun testSo32540947() {
val results = arrayListOf<Pair<Int,Int>>()
(1..3).forEach [email protected] { x ->
(1..3).forEach [email protected] { y ->
if (x == 2 && y == 2) [email protected] // continue @outer
if (x == 1 && y == 1) [email protected] // continue @inner
results.add(Pair(x,y))
}
}
assertEquals(listOf(Pair(1,2), Pair(1,3), Pair(2,1), Pair(3,1), Pair(3,2), Pair(3,3)), results)
val results2 = arrayListOf<Int>()
run [email protected] {
(1..20).forEach { x ->
if (x == 5) [email protected]
results2.add(x)
}
}
assertEquals(listOf(1,2,3,4), results2)
}
खूबसूरती से नहीं, एक और समाधान नहीं है? – store88