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相关问答推荐

Ktor错误:未指定端口或sslPort

带有Spring Boot和Kotline的可嵌入实体

插入/更新/upsert时不发出房间流

在Webflux应用程序中通过kotlin协程启动fire and forget job

在调用父构造函数之前重写类属性

Kotlin 函数名后面的大括号是什么意思?

Gradle:无法创建 ExtensiblePolymorphicDomainObjectContainer

为什么Kotlin不用static inner class来实现带有object关键字的单例呢?

使用 kotlin 流删除 map 中具有某些相似性的值

有什么方法可以要求在 kotlin 中的类型参数上进行注释?

如何在 Kotlin 中将with代码转换为完整代码?

为什么 Kotlin 的 null 安全性不能与局部变量初始化器一起正常工作?

如何在 kotlin 中通过反射设置委托属性值?

如何在 Kotlin 中使用 volatile

如何通过反射使用 Kotlin 对象

在 sharedPref.getString 中有一个默认值有什么意义?

保存对象时未填充 Spring Boot JPA@CreatedDate @LastModifiedDate

Kotlin替换字符串中的多个单词

kotlin中的全局可拓函数

在多平台子元素中使用kapt