Почему :: синтаксис не может вызвать функцию kotlin в некоторых случаях? - PullRequest
1 голос
/ 01 октября 2019

Попробуйте этот код:

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 Ответ

4 голосов
/ 01 октября 2019

Это потому, что синтаксис :: относится к функциям верхнего уровня. Если вы хотите получить IntArray.sort(), вы должны написать arr.also(IntArray::sort)

Обновление : вы также можете вызывать методы this с синтаксисом ::

...