为什么::syntax在某些情况下不能调用kotlin函数?

为什么::syntax在某些情况下不能调用kotlin函数?,kotlin,method-reference,Kotlin,Method Reference,请尝试以下代码: fun foo(arr: IntArray): Boolean { arr.also(::sort) } IDEA告诉我需要导入排序函数,如下所示: import java.util.Arrays.sort fun bar(arr: IntArray): Boolean { arr.also { it.sort() } } 它称之为: public actual fun IntArray.sort(): Unit { if (size > 1

请尝试以下代码:

fun foo(arr: IntArray): Boolean {
    arr.also(::sort)
}
IDEA告诉我需要导入排序函数,如下所示:

import java.util.Arrays.sort
fun bar(arr: IntArray): Boolean {
    arr.also { it.sort() }
}
它称之为:

public actual fun IntArray.sort(): Unit {
    if (size > 1) java.util.Arrays.sort(this)
}
公共静态无效排序(int[]a){
DualPivotQuicksort.sort(a,0,a.length-1,null,0,0);
}
但它应该直接使用kotlin函数,如下所示:

import java.util.Arrays.sort
fun bar(arr: IntArray): Boolean {
    arr.also { it.sort() }
}
它称之为:

public actual fun IntArray.sort(): Unit {
    if (size > 1) java.util.Arrays.sort(this)
}

为什么::syntax在这种情况下不能调用kotlin函数?

这是因为
syntax指的是顶级函数。如果要引用
IntArray.sort()
则必须编写
arr.allow(IntArray::sort)


更新:您还可以使用
语法调用
this
的方法,因为
语法指的是顶级函数。如果要引用
IntArray.sort()
则必须编写
arr.allow(IntArray::sort)


更新:您还可以使用不完全正确的
语法调用
的方法。。。您也可以通过这种方式调用非顶级函数,例如,您可以为实际类型的
this
(或层次结构中向上的任何类型)的任何此类函数部分编写
::someMethod
,而不是
this::someMethod
。这并不完全正确。。。您也可以通过这种方式调用非顶级函数,例如,您可以为实际类型的
this
(或层次结构中向上的任何类型)的任何此类函数部分编写
::someMethod
,而不是
this::someMethod
。。。