gpt4 book ai didi

function - 如何使用 Kotlin 将函数输出转换为 Unit

转载 作者:IT老高 更新时间:2023-10-28 13:46:35 27 4
gpt4 key购买 nike

我在 Kotlin 中应该返回 Unit 的函数遇到问题,但由于使用了另一个返回 bool 值的函数,存在类型不匹配。

这是一个人为的例子:

fun printAndReturnTrue(bar: Int): Boolean {
println(bar)
return true
}

fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}

在这里,我实际上并不关心 printAndReturnTrue 返回 bool 值的事实。我只想 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)
}
}

我确信有一些惯用的方法可以做到这一点(或者是最后一个例子?),但现在我没有找到它们。

最佳答案

不幸的是,没有惯用的方法可以做到这一点。之前出现过类似的问题,将 (T) -> Boolean 类型的 lambda 传递给接受 (T) -> Unit lambdas 的函数,并且需要自动转换应该会在未来的某个时候出现这种语言。

现在,您可以在 when 表达式的末尾使用扩展函数将其强制转换为 Unit 值:

fun Any?.toUnit() = Unit

fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}.toUnit()

或者,一个扩展属性,如果你碰巧更喜欢它:

val Any?.unit get() = Unit

fun foo(bar: Int): Unit = when(bar) {
0 -> println("0")
else -> printAndReturnTrue(bar)
}.unit

当然,如果你使用其中任何一个,你可以省略函数的显式 Unit 返回类型。

关于function - 如何使用 Kotlin 将函数输出转换为 Unit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47370414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com