如何习惯性地在Kotlin中调用可为空的Lambda?

Bar*_*man 3 kotlin

鉴于以下lambda:

val lambda: () -> Unit = null
Run Code Online (Sandbox Code Playgroud)

对于Kotlin来说,调用以下可为空的lambda会导致以下哪些调用?

lambda?.let { it() }
Run Code Online (Sandbox Code Playgroud)

lambda?.invoke()
Run Code Online (Sandbox Code Playgroud)

Ale*_*hin 5

让我们问一下Kotlin编译器:

 val lambda: (() -> Unit)? = null    
 lambda()
Run Code Online (Sandbox Code Playgroud)

编译器说:

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

是的,这似乎?.invoke()是必经之路。

尽管这对我(以及编译器)来说似乎也不错:

 if (lambda != null) {
      lambda()     
 }
Run Code Online (Sandbox Code Playgroud)