Почему Kotlin sortedWith () не просто берет функцию - PullRequest
0 голосов
/ 21 сентября 2019

В этом примере кода sortedWith используется с функцией compare.Похоже, что для определения функции нужно, чтобы она была внутри Comparator.Это похоже на дополнительный слой.Почему sortedWith не просто берет функцию, которая передает два T объекта и возвращает Int?

fun main(){println(get_list())}
fun get_list(): List<Int> {return arrayListOf(1, 5, 2)
  .sortedWith(object:Comparator<Int>{override fun compare(l:Int,r:Int)=r-l})}

sortedWith справочную страницу : sortedWith reference page

1 Ответ

0 голосов
/ 21 сентября 2019

Поскольку sortedWith поддерживается только в общих библиотеках, я бы сказал, что он требует Comparable для более безопасной обработки различий в том, как целевые платформы обрабатывают сравнения элементов.

Из-за получателей обоихподписи, являющиеся своего рода списком (не в смысле типа Котлина), можно ожидать, что сравнения могут быть между разными типами между двумя итерациями.Если у вас нет сигнатуры compareTo между типом приемника и типом входа, то он не будет знать, как безопасно конвертировать между компаратором Kotlin и, скажем, сравнением Javascript, где

"" == false равно True

"Hello World" == false является False

Хотя, вероятно, эти типы специальных языковых правил принимаются во внимание при проектировании языка, это пример для примитивов, где, если бы у нас были определенные во время выполнения объекты и другая сложная информация,это может быстро сломаться.

Если Comparable не использовался в качестве промежуточного интерфейса, ожидаемые сравнения могут иметь смысл в Kotlin, но при переводе на целевую платформу могут иметь неожиданные последствия.

Короче говоря, это немногоиз дополнительного слоя, чтобы обеспечить безопасность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...