Обратите внимание, что если вы просто хотите вернуться с with
, вы должны вместо этого использовать return@with
.
Итак, ваш код должен выглядеть так:
fun main(args: Array<String>) : Unit {
val l = listOf(listOf(1,2,3), listOf(4,5,6))
val t = with(l) {
get(0).forEach {
return@with 2
}
}
println(t)
}
и да ... он вернет 2
тогда .. Вы также можете использовать return@forEach
, если вы просто хотите вернуться с forEach
...
Если вы действительно хотите использовать вместо этого свою собственную метку, убедитесь, что вы поместили ее перед открывающей фигурной скобкой (без пробела (см. Также Соглашение о кодировании Kotlin относительно лямбда-форматирования )), например ::
fun main(args: Array<String>) : Unit {
val l = listOf(listOf(1,2,3), listOf(4,5,6))
val t = with(l) label@{
get(0).forEach {
return@label 2
}
}
println(t)
}
Также обратите внимание: если это был for
, while
или что-то еще, где можно использовать continue
или break
, то вы фактически размещаете метку впереди (см. Ссылка на Kotlin # Break and Продолжить ярлыки ), например:
lambda@ for (i in 1..3) {
break@label
}
Наконец: старайтесь по возможности опускать собственные метки В большинстве случаев они вам действительно не нужны ... и, вероятно, уже достаточно повторно использовать существующие метки return @. Проверьте также Соглашения о кодировании Kotlin, например возвращается в лямбду