Eugen Martynov
02/28/2019, 4:25 PMwhen (...) {...} ?: Unit
ghedeon
02/28/2019, 4:27 PMgildor
02/28/2019, 4:33 PMgildor
02/28/2019, 4:34 PMEugen Martynov
02/28/2019, 4:51 PMEugen Martynov
02/28/2019, 4:51 PMDmitry Kandalov
03/01/2019, 12:47 PMval Unit.exhaustive get() = this
Dmitry Kandalov
03/01/2019, 12:49 PMwhen (result) {
...
}.exhaustive
gildor
03/01/2019, 1:11 PMgildor
03/01/2019, 1:12 PMgildor
03/01/2019, 1:13 PMDmitry Kandalov
03/01/2019, 1:13 PMwhen
к чему-нибудь присваивается (или возвращается из функции) и будет exhaustive сам по себеgildor
03/01/2019, 1:14 PMgildor
03/11/2019, 2:28 AMЕсли не 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
gildor
03/11/2019, 2:30 AMwhen (case) {
Operation.Log -> log("foo")
Operation.Delete -> {
delete("bar")
Unit
}
}.exhaustive
gildor
03/11/2019, 2:30 AMDmitry Kandalov
03/11/2019, 12:07 PMЕсли не Unit, тоЯ имел ввиду, что еслик чему-нибудь присваиваетсяwhen
when
не используется для экшенов, то он обычно присваивается и будет требовать всех бранчей. Если используется для экшенов с разными типами, то да, есть проблема с Any, но в этом случае можно спорить, что надо писать код так, чтобы все экшены возвращали Unit или не игнорить результат вызова функции.gildor
03/11/2019, 12:22 PM