kotlin“何时”使用“ startWith”获得编译错误

时间:2019-12-01 18:24:54

标签: kotlin compiler-errors

我对Kotlin不满意(尽管我在Java等其他语言方面有很多经验)。我试图用Kotlin编写一些代码,但不明白为什么以下代码无法编译。

private fun test(inpStr : String) =
        when (inpStr) {
            "bill" -> "harry"
            startsWith "john" -> "john"
            else -> inpStr
        }

以下内容会编译:

private fun test2(inpStr : String) =
        when {
            inpStr == "bill" -> "harry"
            inpStr.startsWith("john") -> "john"
            else -> inpStr
        }

基于我对“何时”的理解,我会认为它们既可以编译也可以等效。我收到的错误消息在“ startsWith”行:

 Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public fun File.startsWith(other: File): Boolean defined in kotlin.io
public fun File.startsWith(other: String): Boolean defined in kotlin.io
public fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = ...): Boolean defined in kotlin.text
public fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = ...): Boolean defined in kotlin.text
public fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = ...): Boolean defined in kotlin.text
public fun String.startsWith(prefix: String, ignoreCase: Boolean = ...): Boolean defined in kotlin.text

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

when (inpStr)对于(!)is ...(!)in ...else具有特殊的规则。

startsWith "john"不是其中之一,因此它被认为是一个完整的表达式,就像"bill"一样;它将被计算,然后与inpString进行比较。 如您所愿,没有转换为inpStr.startsWith("john")