Return Не работает с метками

r@ print("Продолжить (y/n): ")
yesorno = readLine()!!
when (yesorno) {
    "y" -> return main()
    "n" -> return
    else -> {
        print("ERRRRRROOOOOOOOR#4734")
        return@r
    }
}

Не работает return@r (unresolved reference @r)


Ответы (1 шт):

Автор решения: Спицко Дмитрий

Вы не можете использовать так "метки", вы вообще ничего не можете использовать так. Просто скакнуть по коду вообще во всех высокоуровневых языках программирования считается жесточайшим моветоном. Даже если вы пишете на каком-нибудь паскале, где есть оператор goto, делающий то что попытались сделать вы, не используйте его. Никогда. Вообще. Оставьте это ассемблеру

return завершает блок кода. Это может быть метод, лямбда, цикл, может еще что-то специфичное. Пример:

observer.filter {
    //do smth
    return@filter true //показываем что тут возвращается результат лямбды, а не той функции, в которой она описана
}


lbl@ for(i in 0..w)
        for(j in ){
            //do smth
            if(smth){
                continue@lbl// переходим к следующей итерации внешнего цикла
            }
        }
→ Ссылка