为什么 :: 语法在某些情况下不能调用 kotlin 函数?
Why :: syntax cannot call kotlin function in some cases?
试试这个代码:
fun foo(arr: IntArray): Boolean {
arr.also(::sort)
}
IDEA告诉我需要导入sort函数,像这样:
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 函数?
因为::
语法引用了顶层函数。如果你想引用 IntArray.sort()
你必须写 arr.also(IntArray::sort)
更新: 你也可以用::
语法
调用this
的方法
试试这个代码:
fun foo(arr: IntArray): Boolean {
arr.also(::sort)
}
IDEA告诉我需要导入sort函数,像这样:
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 函数?
因为::
语法引用了顶层函数。如果你想引用 IntArray.sort()
你必须写 arr.also(IntArray::sort)
更新: 你也可以用::
语法
this
的方法