Kotlin - передать массив функций в качестве аргумента функции - PullRequest
0 голосов
/ 25 января 2019

У меня есть эта функция, которая (теоретически) принимает массив функций в качестве аргумента.

fun execute(afterDay: Long, listeners: Array<(List<String>) -> Unit>)

В клиентском классе я пытался вызвать этот метод execute и передать функции в качестве параметра:

fun updateMovies(ids: Array<String>){

}

fun getNewIds() {
    GetImdbIds(kodein).execute(daysBack.toEpochDay(), [::updateMovies])
}

Но это не компилируется.

Что я делаю не так?

ошибка:

Error:(29, 59) Kotlin: Type inference failed. Expected type mismatch: inferred type is Array<KFunction1<@ParameterName Array<String>, Unit>> but Array<(List<String>) -> Unit> was expected
Error:(29, 59) Kotlin: Unsupported [Collection literals outside of annotations]

1 Ответ

0 голосов
/ 25 января 2019

Я заставил это работать, сделав два изменения.

Во-первых, ваша updateMovies функция, как написано, занимает Array<String>, когда ваш listeners хочет функции, которые принимают List<String>.Итак, мы можем внести это изменение:

fun updateMovies(ids: List<String>) {
    TODO()
}

Далее, если вы создадите массив ссылок на функции, используя arrayOf() вместо попытки использовать недопустимый литерал массива, это должно скомпилировать:

GetImdbIds(kodein).execute(1L, arrayOf(::updateMovies))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...