Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 为什么Kotlin sortedWith()不只是接受一个函数_Function_Kotlin - Fatal编程技术网

Function 为什么Kotlin sortedWith()不只是接受一个函数

Function 为什么Kotlin sortedWith()不只是接受一个函数,function,kotlin,Function,Kotlin,在此示例中,代码sortedWith与compare功能一起使用。似乎要指定函数,需要将其放在比较器中。这看起来像是额外的一层。为什么sortedWith不只是接受传递给两个T对象并返回Int的函数 fun main(){println(get_list())} fun get_list(): List<Int> {return arrayListOf(1, 5, 2) .sortedWith(object:Comparator<Int>{override fun c

在此示例中,代码
sortedWith
compare
功能一起使用。似乎要指定函数,需要将其放在
比较器中。这看起来像是额外的一层。为什么
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})}
fun main(){println(get_list())}
fun get_list():list{return arrayListOf(1,5,2)
.sortedWith(对象:比较器{override fun compare(l:Int,r:Int)=r-l})
:

由于sortedWith仅在公共库中受支持,我认为它需要一个可比的到更安全的方法来处理目标平台在处理项目比较方面的差异

由于两个签名的接收者都是一种列表(不是Kotlin类型意义上的),因此可以预期两次迭代之间的比较可能是不同类型之间的比较。 如果您没有receiver type和input type之间的compareTo签名,那么它将不知道如何在Kotlin比较器和Javascript比较器之间安全地进行转换

“”==false
为True

“Hello World”==false
为false

虽然在语言设计中可能会考虑到这些特定的语言规则,但这是一个原语示例,如果我们有运行时定义的对象和其他复杂信息,它可能会很快崩溃

如果Comparable没有用作中介接口,那么预期的比较在Kotlin中可能是有意义的,但是当转换到目标平台时,可能会产生意想不到的结果


长话短说,这是一个额外的一层,提供安全

没有回答这个问题,但您可以将其写为
.sortedWith(Comparator{l,r->r-l})
“因为sortedWith仅在公共库中受支持”——所选的“common”和“1.3”表示我请求页面显示的信息。