Intereting Posts
Как переопределить метод setter в котлин? Ссылка на функцию расширения? Как использовать volatile на Kotlin В библиотеке Injekt для Kotlin, как мне вводить функции вместо значений? Возможно ли реализовать индивидуальное деструктурирование для не-класса данных в Котлин? Как импортировать каталог / полный пакет в Intellij для целей тестирования Kotlin, как объявить скованные поля с одинаковым типом данных Android – ошибка преобразования Bytecode в Dex с версией min sdk Синтаксис вторичного построения kotlin Как уменьшить размер изображения перед загрузкой, чтобы ускорить приложение? Как пропустить модели proguard, используемые retrofit2, которые находятся на базовом пакете? Обновление настроек уведомлений для Android-приложений Kotlin Coroutines в службе Android В чем разница между var map = HashMap <Int, String> () и var map = HashMap <Int, String> (n)? Не удалось выполнить синхронизацию проекта Gradle, Котлин

перерыв или возврат из выражения

Что я хотел бы сделать:

when(transaction.state) { Transaction.Type.EXPIRED, //about 10 more types Transaction.Type.BLOCKED -> { if (transaction.type == Transaction.Type.BLOCKED && transaction.closeAnyway) { close(transaction) break //close if type is blocked and has 'closeAnyway' flag } //common logic } //other types } 

Я не могу написать break :

«break» и «continue» не допускаются в выражениях «когда». Рассмотрите возможность использования меток для продолжения / выхода из внешнего цикла.

Это способ return/break от заявлений? Или что это лучший способ его решить?

Solutions Collecting From Web of "перерыв или возврат из выражения"

Вы можете использовать run с возвратом на метке :

 when(transaction.state) { Transaction.Type.EXPIRED, //about 10 more types Transaction.Type.BLOCKED -> run { if (transaction.type == Transaction.Type.BLOCKED && transaction.closeAnyway) { close(transaction) return@run //close if type is blocked and has 'closeAnyway' flag } //common logic } //other types } 

Вы можете использовать метки для разрыва / продолжения / возврата. например:

 transactions@ for (transaction in transactions) { when (transaction.state) { Transaction.Type.EXPIRED, Transaction.Type.BLOCKED -> { break@transactions } } } 

См. « Возвраты и переходы» – язык программирования Kotlin для получения более подробной информации.

Работайте с использованием apply() :

 transaction.apply { when(state) { Transaction.Type.EXPIRED, //about 10 more types Transaction.Type.BLOCKED -> { if (type == Transaction.Type.BLOCKED && closeAnyway) { close(this) return@apply } //common logic } //other types } }