为什么::语法在某些情况下无法调用kotlin函数?

时间:2019-10-01 05:47:24

标签: kotlin method-reference

尝试以下代码:

fun foo(arr: IntArray): Boolean {
    arr.also(::sort)
}

IDEA告诉我,排序功能需要导入,就像这样:

import java.util.Arrays.sort

它叫做:

public static void sort(int[] a) {
    DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}

但是它应该直接使用kotlin函数,就像这样:

fun bar(arr: IntArray): Boolean {
    arr.also { it.sort() }
}

它叫做:

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

在这种情况下,为什么::语法无法调用kotlin函数?

1 个答案:

答案 0 :(得分:4)

这是因为::语法是指顶级函数。如果您想推荐IntArray.sort(),则必须写arr.also(IntArray::sort)

更新:您还可以使用this语法调用::的方法