Eugen Martynov
02/28/2019, 4:25 PMwhen (...) {...} ?: Unit
ghedeon
02/28/2019, 4:27 PMgildor
02/28/2019, 4:33 PMEugen Martynov
02/28/2019, 4:51 PMDmitry Kandalov
03/01/2019, 12:47 PMval Unit.exhaustive get() = this
when (result) {
...
}.exhaustive
gildor
03/01/2019, 1:11 PMDmitry Kandalov
03/01/2019, 1:13 PMwhen
к чему-нибудь присваивается (или возвращается из функции) и будет exhaustive сам по себеgildor
03/01/2019, 1:14 PMЕсли не Unit, тоЭто же не так, один из бранчей может возвращать значение которое мы не используем, только не будет Unit и что бы это исправить каждый бранч который возвращает не Unit придется каким то образом передать в Unit Вот к примерук чему-нибудь присваиваетсяwhen
enum class Operation { Log, Delete }
fun log(id: String): Unit = TODO()
fun delete(id: String): Boolean = TODO()
when (case) {
Operation.Log -> log("foo")
Operation.Delete -> delete("bar")
}.exhaustive // Не работает так как типом этого экспрешена будет Any, а не Unit
when (case) {
Operation.Log -> log("foo")
Operation.Delete -> {
delete("bar")
Unit
}
}.exhaustive
Dmitry Kandalov
03/11/2019, 12:07 PMЕсли не Unit, тоЯ имел ввиду, что еслик чему-нибудь присваиваетсяwhen
when
не используется для экшенов, то он обычно присваивается и будет требовать всех бранчей. Если используется для экшенов с разными типами, то да, есть проблема с Any, но в этом случае можно спорить, что надо писать код так, чтобы все экшены возвращали Unit или не игнорить результат вызова функции.gildor
03/11/2019, 12:22 PM