2017-12-20 3 views
3

question을 보았습니다."과부하 해결 모호성 오류"가 다른 과부하로 해결되었습니다

이 줄을 그

fun Int.toUpperCase() = "" 

이 문제

Error:(6, 16)
Overload resolution ambiguity:
@InlineOnly public inline fun Char.toUpperCase(): Char defined in kotlin.text
@InlineOnly public inline fun String.toUpperCase(): String defined in kotlin.text

코드의이 조각 떨어져 간다

를 추가하는 방법이 될 수있다?

fun main(args: Array<String>){ 
    var ab: String? = "hello" 
    ab = null 
    println(ab?.toUpperCase()) 
} 

참조 질문에 주어진 대답은 의미가 있습니다. 단지 여기서 일어나는 일에 답을하지 못합니다.

+1

사실, 그것은 머리를 긁적 거리는 물질입니다 :) –

답변

0

파일에 fun String.toUpperCase() = ""을 다시 정의하면 작동합니다. 컴파일러는 사용할 로컬로 정의 된 함수를 선택하고 모호한 함수를 더 이상 고려하지 않습니다. abNothing?이되고 이것이 모든 null 가능 유형의 부속 유형이므로 모든 수신자가이를 수행합니다.

확인이 하나를 로컬로 정의 된 확장이 사용되기 때문에 다음 stdlib에서

fun main(args: Array<String>) { 
    println("hello".substringBefore("e")) 
} 

fun String.substringBefore(e: String) = "hey" 

substringBefore가 호출되지 않습니다.