Котин Как указать метку возврата при закрытии в лямбда

Исправлена ​​проблема при создании EntityContainer для игры (контейнер списков на NPC, Players, Objects и т. Д.). При переопределении оператора вызова и в случае, когда мой код завернут внутри родительского лямбда, я не могу добавить оператор return .

 import java.util.* fun main(args: Array<String>) { val container = Container<String>() container.addList(listOf("h", "e", "l", "l", "o")) container.addList(listOf(" ")) container.addList(listOf("w", "o", "r", "l", "d", "!")) Emptylambda { container[String(), Any(), Any()].forEach { val myCondition = true if (myCondition) return@forEach print(it) } } println("\n\n") Emptylambda { container[String(), Any(), Any()] { val myCondition = true if (myCondition) return //Does not compile print(it) } } } class Container<E> { private val lists = ArrayList<List<E>>(10) fun addList(list: List<E>) = lists.add(list) fun forEach(action: (E) -> Unit): Unit { lists.forEach { it.forEach { action(it) } } } operator fun invoke(action: (E) -> Unit) = this.forEach { action(it) } operator fun get(vararg ignored: Any): Container<E> { return this } } object Emptylambda { operator fun invoke(action: () -> Unit) { action() } } 

Вот ошибка:

 Error:(43, 21) Kotlin: 'return' is not allowed here 

Это небольшой пример того, что я написал, чтобы легко воспроизвести проблему. Пример в реальном мире был бы следующим.

 GameScreen { entities[EntityType.PLAYER, EntityType.NPC] { val entity = it if (!entity.isReady()) return //Cant use return here //Draw onto screen } } 

Если вы хотите вернуться из внутренней лямбды, вы можете, используя return at label :

  Emptylambda outer@ { container[String(), Any(), Any()] inner@ { // <--- add label here val myCondition = true if (myCondition) return@inner // <--- exits from lambda print(it) } } 

Но вы не можете полностью вернуть ярлык outer .