首页 > 解决方案 > Kotlin:“类型推断失败”

问题描述

有人知道我在这里做错了什么吗?

// ...
val alphabet = ('a'..'z').toList()
val str = "testing"
val arr = str.split("")

for (char in arr) {
    var i = alphabet.indexOf(char) // Throws Error!
    //    ...
}

indexOf-method 导致“ Error:(10, 26) Kotlin: Type inference failed。类型参数 T 的值应该在输入类型(参数类型、接收器类型或预期类型)中提及。尝试显式指定它。 "

我试图“var i: Int = alphabet.indexOf(char)”和“alphabet.indexOf(char) as Int”。同样的结果...

这里有什么问题?

标签: kotlin

解决方案


我相信你的问题是你认为变量char包含一个Char值。如果是这种情况,那么indexOf接受一个Char值然后在List<Char>调用该方法的字符列表 () 中查找该字符的位置是有意义的。

但是str.split()返回的是 a List<String>,而不是 a List<Char>chara 也是String。因此,您要求indexOf方法告诉您 aString在字符列表 ( List<Char>) 中的位置。那没有意义。这就是问题的根源。我不确定这到底是如何转化为您从 Kotlin 编译器得到的错误的。

为了清楚起见,这一行产生了同样的错误:

var i = alphabet.indexOf("c") // Throws Error!

但编译器很喜欢这一行:

var i = alphabet.indexOf('c') // No Error!!!

推荐阅读