如何将 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()
}
我有一个函数,其可空 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()
}