首页 > 解决方案 > 如何在 Kotlin 中惯用地调用可为空的 lambda?

问题描述

给定以下 lambda:

val lambda: () -> Unit = null

以下哪个调用是 Kotlin 调用可空 lambda 的惯用方法?

lambda?.let { it() }

对比

lambda?.invoke()

标签: kotlin

解决方案


让我们问一下 Kotlin 编译器:

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

编译器说:

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

所以,是的,似乎这?.invoke()是要走的路。

虽然这对我来说似乎很好(编译器也是):

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

推荐阅读