Kotlin:“类型推断失败”

mic*_*ech 3 kotlin

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

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

for (char in arr) {
    var i = alphabet.indexOf(char) // Throws Error!
    //    ...
}
Run Code Online (Sandbox Code Playgroud)

indexOf 方法会导致“ Error:(10, 26) Kotlin: Type inference failed. The value of the type argument T should be returned in input types (argument types,receiver type or Expected type). Try tospecify it displayedly . ”

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

这里有什么问题?

Ste*_*eve 8

我相信你的问题是你认为变量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!
Run Code Online (Sandbox Code Playgroud)

但编译器很喜欢这一行:

var i = alphabet.indexOf('c') // No Error!!!
Run Code Online (Sandbox Code Playgroud)