Я пытаюсь выяснить, как работает возврат в Котлине. Прямо сейчас у меня есть функция с двумя вложенными циклами.
Все возвраты должны возвращаться для родительской функции getValue (), одна, кажется, работает должным образом, другая - нет.
val myArray = arrayOf(
MyObj("String 1", mapOf(Pair(MyEnum.apple, "String 2"))),
MyObj("String 2", mapOf(Pair(MyEnum.orange, "String 1"),
Pair(MyEnum.apple, "String 3"))),
MyObj("String 3", mapOf(Pair(MyEnum.orange, "String 2")))
)
val myObj = myArray[1]
fun main(args: Array<String>) {
getValue(MyEnum.apple)
}
fun getValue(myEnum: MyEnum) {
myObj.myMap.forEach { (enum, str) ->
if (enum == myEnum) {
myArray.forEach {obj ->
if (obj.name == str) {
if (checkStuff(obj)) {
println("checkStuff returned true")
return // this continues to printLn
}
println("returned false")
return // This appears to return as expected
}
}
} else {
println("Should not be hit")
}
}
}
fun checkStuff(obj: MyObj): Boolean {
return obj.name == "String 1"
}
data class MyObj (val name: String, val myMap: Map<MyEnum, String>)
enum class MyEnum {
apple, orange, pear
}
Возврат внутри checkStuff, если всегда продолжается на printLn.
Прочитав документацию, я подумал, что добавление return @ getValue вернет функцию верхнего уровня и выйдет из этой функции.
Кажется, я что-то упустил. Как сделать, чтобы первое возвращение не продолжалось до предложения else с printLn?