gpt4 book ai didi

kotlin - Lambda参数类型的类型推断

转载 作者:行者123 更新时间:2023-12-02 13:06:40 25 4
gpt4 key购买 nike

Kotlin无法编译此代码,因为编译器指出“错误:不可能将智能强制转换为Nothing,因为'accumulator'是一个复杂的表达式”

Ye olde函数被称为您所期望的,即,我想返回indexOfMax,但是更重要的是理解为什么“智能转换”未能转换为accumulatorInt

fun indexOfMax(a: IntArray): Int? {
return a.foldIndexed(null) { index, accumulator, element ->
return if (accumulator is Int) {
var i:Int = accumulator
return if (accumulator == null) index
else if (element > a[i]) index
else accumulator
} else accumulator
}
}

编辑

是的,接受的答案有效!解决方法如下:
fun indexOfMax(a: IntArray): Int? {
return a.foldIndexed(null as Int?) { index, accumulator, element ->
if (accumulator == null) index
else if (element >= a[accumulator]) index
else accumulator
}
}

最佳答案

这里的accumulator的类型只能从初始值参数null推断出来。该null的类型为Nothing?。在检查accumulator的类型为Int之后,将其类型智能广播到Nothing?Int的交集,从而得到Nothing

此处的解决方案是显式指定函数类型参数,或指定参数的类型:

a.foldIndexed(null as Int?) { ...
// or
a.foldIndexed<Int?>(null) { ...

关于kotlin - Lambda参数类型的类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914434/

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