为什么::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
。。。