【发布时间】:2020-04-26 10:33:50
【问题描述】:
我一直在尝试在 Kotlin 中使用“when”进行递归,确实,它有效,但它也给了我一些奇怪的输出,带有 void 数据类型,在 Kotlin 中称为 Unit,“when”语句如何工作?它必须返回一些东西吗?
fun pick(camara: Boolean, klinga: Boolean){
when {
camara -> println("KLINGA")
klinga -> println("CAMARA")
else -> println(pick(Random.nextBoolean(), Random.nextBoolean()))
}
}
pick(false, false)
它返回:
CAMARA
kotlin.Unit
kotlin.Unit
kotlin.Unit
递归是正确的,但它也输出空数据(可能对应于递归调用的次数)
那么问题来了,为什么会出现这种输出呢?是因为“when”返回了函数调用的返回值吗?在这种情况下单位?
【问题讨论】:
-
您的 else 分支正在运行,您正在打印递归调用的返回值。
-
因为
void隐式返回Unit。 -
将 else 分支更改为
else -> pick(Random.nextBoolean(), Random.nextBoolean())