사랑은 돈보다 더 무거워, Kotlin이라면

4600 단어 Kotlin
무엇이 보이는가돈이 사랑보다 더 무겁다 이런 슬픈 화제는 Kotlin이라면 그 슬픈 현실도 뒤집을 수 있다.
Kotlin은 웹 브라우저에서 간단하게 실행할 수 있는 코드도구는 공식에서 제시한 것이기 때문에 이것으로 문제 코드를 실행해 보세요.

너무 좋아요!Kotlin이라면,'사랑'이'금'보다 더 무겁다는 것을 증명했다!

설명


위의 코드에 스크롤할 때 보이지 않는 부분을 더하면 다음과 같다.
fun main(args: Array<String>) {
    println("'金' < '愛' = " + ("金" < '愛'))
    println("'愛' < '金' = " + ("愛" < '金'))
}



operator fun String.compareTo(c: Char) = c.toString().compareTo(this)
네, String에서 성장compareTo()하여 크기를 비교적 역전시키는 것은 옳지 않습니다.
Kotlin은 연산자 과부하가 있고 < 방법의 실행으로 대체됩니다.
또한 Kotlin은 기존 클래스에 (보기) 방법을 추가할 수 있는 확장 함수를 제공합니다.
즉, compareTo()에 반전비교결과String의 방법compareTo()의 확장함수를 추가하면 상기와 같은 상반된 결과를 얻을 수 있다.
그러나 StringcompareTo(String)를 서로 비교하는 방법을 정의했다.
클래스에 확장 함수에 추가된 방법과 같은 서명 방법이 존재한다면, 이 방법을 실행할 때 확장 함수는 이 방법을 실행하지 않고 원시적인 방법을 실행합니다.
비교를 반전시키기 위해 compareTo(String)에서 확장 함수를 정의해도
fun main(args: Array<String>) {
    println("'金' < '愛' = " + ("金" < "愛"))
    println("'愛' < '金' = " + ("愛" < "金"))
}

operator fun String.compareTo(s: String) = s.compareTo(this)
오리지널 compareTo(String)를 실행하기 때문에 고통스러운 현실에 직면하게 된다
'金' < '愛' = false
'愛' < '金' = true
그러나 확장 함수의 과부하는 문제없습니다.
그리고 다행히도?StringString의 방법은정의되지 않음.
따라서 확장 함수 정의compareTo(Char) 방법을 통해 compareTo(Char)String"金"Char를 비교하여 상기 결과를 얻을 수 있다.
다음은 Kotlin의 확장 함수에 대한 잘못된 사용법입니다.

좋은 웹페이지 즐겨찾기