我在Kotlin中有一个应该返回Unit的函数有麻烦,但是由于使用了另一个返回布尔值的函数,所以存在类型不匹配.
这是一个人为的例子:
fun printAndReturnTrue(bar: Int): Boolean {
println(bar)
return true
}
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}
Run Code Online (Sandbox Code Playgroud)
在这里,我实际上并不关心printAndReturnTrue返回布尔值的事实.我只想让foo执行副作用操作.但编译器警告类型不匹配:我else应该返回一个Unit值.
有没有一种很好的方法将值转换为Unit?
我看到的最简单的解决方案是:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> {
printAndReturnTrue(bar)
Unit
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> eraseReturnValue(printAndReturnTrue(bar))
}
fun eraseReturnValue(value: Any) = Unit
Run Code Online (Sandbox Code Playgroud)
或者我使用完整的函数形式:
fun foo(bar: Int): Unit {
when(bar) …Run Code Online (Sandbox Code Playgroud)