【发布时间】:2020-02-14 08:44:04
【问题描述】:
我在 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)
}
}
我确信有一些惯用的方法可以做到这一点(或者是最后一个例子?),但现在我没有找到它们。
【问题讨论】: