Given the following lambda:

val lambda: () -> Unit = null

以下哪项调用对于Kotlin调用可为空的lambda是idomatic的?

lambda?.let { it() }

vs

lambda?.invoke()

推荐答案

Let's ask Kotlin compiler:

 val lambda: (() -> Unit)? = null    
 lambda()

编译器说:

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

So yeah, seems that ?.invoke() is the way to go.

尽管我(以及编译器)觉得这也不错:

 if (lambda != null) {
      lambda()     
 }

Kotlin相关问答推荐

在Kotlin中组合多个可为空的集合

如何使用收件箱文件中的类运行Kotlin应用程序

有什么原因,我得到一个空相关的错误在这个代码

Jetpack Compose中的数字 Select 器问题

关键字';在When Kotlin When-语句中

KTOR';S函数`staticResources`在Kotlin本机目标上不可用

Scala性状线性化等价于Kotlin

Kotlin Coroutine()是如何工作的?S阻止了.

如何通过更改现有数据类型来执行Android房间数据库迁移?

为什么可组合对象看似无状态(唯一传递的参数是函数,而不是状态),但会进行重组

如何从 Period.between() 返回的字符串中提取信息? (Kotlin )

Kotlin SIZE_BYTES

每个 Kotlin 版本的默认 Kotlin 语言版本是什么?

在 Kotlin 协程中切换 IO 和 UI 的正确方法是什么?

如果不为空,则为 builder 设置一个值 - Kotlin

is return inside function definition 也是 kotlin 中的表达式

从字符串列表构建字符串

为什么 IntelliJ Idea 无法识别我的 Spek 测试?

如何在Spring Boot应用程序上启用承载身份验证?

Android Kotlin .visibility