如何将 eivls 运算符与可为空的 lambda 参数一起使用?

How to use the eivls operator with a nullable lambda parameter?

我有一个函数,其可空 lambda 参数定义为 -

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

想法是在文件下载后,调用该函数的任何人都可以传递一个 lambda 函数来在文件下载后执行一些代码。

该参数为空,因为有人可能不希望下载 lambda post。

所以在 download_a_file function 里面我有这个代码 -

if( callback_after_download_is_complete != null)
    callback_after_download_is_complete()

哪个有效,但不够优雅。如果可以的话,我宁愿在这里使用 elvis 运算符。 但是,我没有找到关于如何使用 elvis 运算符调用可为空的 lambda 参数的任何好的参考。你能做到吗?如果是这样 - 怎么样?

如果您注意到,您不能直接调用匿名可空函数:

Reference has a nullable type '(() -> Any)?', use explicit '?.invoke()' to make a function-like call instead

所以你所要做的就是使用 invoke/0:

fun download_a_file(callback_after_download_is_complete: (() -> Any)? = null) {
  callback_after_download_is_complete?.invoke()
}