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

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

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 } }