我对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
有什么想法吗?
答案 0 :(得分:0)
when (inpStr)
对于(!)is ...
,(!)in ...
和else
具有特殊的规则。
startsWith "john"
不是其中之一,因此它被认为是一个完整的表达式,就像"bill"
一样;它将被计算,然后与inpString
进行比较。
如您所愿,没有转换为inpStr.startsWith("john")
。