我一直在尝试在 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)
Run Code Online (Sandbox Code Playgroud)
它返回:
CAMARA
kotlin.Unit
kotlin.Unit
kotlin.Unit
Run Code Online (Sandbox Code Playgroud)
递归正确进行,但它也输出空数据(可能对应于递归调用的次数)
那么问题来了,为什么会出现这样的输出呢?是因为“when”返回的是函数调用的返回值吗?在这种情况下单位?
不返回任何内容的函数实际上返回Unit
. 你的功能与
fun pick(camara: Boolean, klinga: Boolean): Unit {...}
Run Code Online (Sandbox Code Playgroud)
可能的解决方案:
tailrec fun pick(camara: Boolean, klinga: Boolean) {
when {
camara -> println("KLINGA")
klinga -> println("CAMARA")
else -> pick(Random.nextBoolean(), Random.nextBoolean())
}
}
fun main() {
pick(false, false)
}
Run Code Online (Sandbox Code Playgroud)
或者
tailrec fun pick(camara: Boolean, klinga: Boolean): String =
when {
camara -> "KLINGA"
klinga -> "CAMARA"
else -> pick(Random.nextBoolean(), Random.nextBoolean())
}
fun main() {
println(pick(false, false))
}
Run Code Online (Sandbox Code Playgroud)
tailrec
用于尾递归函数的优化
归档时间: |
|
查看次数: |
393 次 |
最近记录: |