我看到了Working example。
添加这一行怎么可能
fun Int.toUpperCase() = ""
这个问题
错误:(6,16)
过载分辨率模糊:
@InlineOnly公开 内联乐趣Char.toUpperCase():在kotlin.text中定义的char @InlineOnly public inline fun String.toUpperCase():在kotlin.text中定义的字符串
为这段代码消失了吗?
fun main(args: Array<String>){
var ab: String? = "hello"
ab = null
println(ab?.toUpperCase())
}
对于参考问题给出的答案是有道理的,它只是没有回答这里发生的事情。
答案 0 :(得分:0)
如果您再次在文件中定义fun String.toUpperCase() = ""
,它甚至可以正常工作。编译器选择使用本地定义的函数,不再考虑模糊的函数。由于ab
变为Nothing?
并且这是所有可空类型的子类型,因此任何接收器都会实现此目的。
这里显示:
fun main(args: Array<String>) {
println("hello".substringBefore("e"))
}
fun String.substringBefore(e: String) = "hey"
来自stdlib的 substringBefore
将不会被调用,因为使用了本地定义的扩展名。