Я думаю, вы должны изменить тип возвращаемого значения на необязательный, это более понятно, как показано ниже:
я проблемы с функцией в Kotlin, которая должна возвращать Unit, но из-за использования другой функции, возвращающей логическое значение, существует несоответствие типов.
Вот надуманный пример:
fun printAndReturnTrue(bar: Int): Boolean {
println(bar)
return true
}
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}
Здесь мне на самом деле все равно, чтоprintAndReturnTrue
возвращает логическое значение. Я просто хочу, чтобы foo выполняла побочные эффекты. Но компилятор предупреждает о несоответствии типов: мойelse
должен вернутьUnit
стоимость.
Есть ли хороший способ конвертировать значение вUnit
?
Самые простые решения, которые я вижу:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> {
printAndReturnTrue(bar)
Unit
}
}
или же:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> eraseReturnValue(printAndReturnTrue(bar))
}
fun eraseReturnValue(value: Any) = Unit
Или я использую полнофункциональную форму:
fun foo(bar: Int): Unit {
when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}
}
Я уверен, что есть некоторые идиоматические способы сделать это (или это последний пример?), Но пока я их не нашел.