Я думаю, вы должны изменить тип возвращаемого значения на необязательный, это более понятно, как показано ниже:

я проблемы с функцией в 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)
    }
}

Я уверен, что есть некоторые идиоматические способы сделать это (или это последний пример?), Но пока я их не нашел.

Ответы на вопрос(4)

Ваш ответ на вопрос