Как использовать оператор eivls с параметром лямбда, допускающим значение NULL? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть функция с параметром лямбда, допускающим значение NULL, определяемым как -

fun download_a_file(callback_after_download_is_complete: (() -> Any)? = null)
    {
        // ... do things ...
    }

Идея состоит в том, что после загрузки файла тот, кто вызывает функцию, может передать лямбда-функцию для выполнения некоторого кода после файл загружен.

Параметр равен null, поскольку кто-то может не sh иметь лямбда-пост-загрузку.

Так что внутри download_a_file function у меня есть этот код -

if( callback_after_download_is_complete != null)
    callback_after_download_is_complete()

Что работает, но не элегантно. Я бы лучше использовал здесь оператора Элвиса, если смогу. Однако я не нашел хороших ссылок на то, как вызвать лямбда-параметр с нулевым значением с помощью оператора elvis. Вы можете сделать это? если так - как?

1 Ответ

3 голосов
/ 24 февраля 2020

Если вы заметили, вы не можете напрямую вызвать анонимную обнуляемую функцию:

Ссылка имеет обнуляемый тип '(() -> Any)?', Используйте явное '? .Invoke ()' вместо этого сделать функциональный вызов

Так что все, что вам нужно сделать, это использовать invoke/0:

fun download_a_file(callback_after_download_is_complete: (() -> Any)? = null) {
  callback_after_download_is_complete?.invoke()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...