在下面的代码中,我有 2 个函数 - 第一个函数包含在 lambda 主体中,另一个则没有。
fun first() = { println("first")}
fun second() = println("second")
first()
second()
Run Code Online (Sandbox Code Playgroud)
只second()打印 - 这是为什么?
第一个是返回函数的函数。事实上发生的情况是first()返回另一个打印“first”的函数,但不执行它。
为此,您必须通过添加另一组括号来调用它:
first()()
// Or
val resultOfFirst = first()
resultOfFirst()
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为=函数的符号类似于 return 语句,当您将内容包装起来时,{}实际上是在创建 lambda。因此,首先返回一个 lambda,但不执行它
这很简单。检查这些的类型:
fun first(): () -> Unit = { println("first") }
fun second(): Unit = println("second")
Run Code Online (Sandbox Code Playgroud)
所以,当你打电话时,first你会得到 lamda 表达式。要调用此函数,请使用.invoke()(或简单地()):
first().invoke()
// or
first()()
Run Code Online (Sandbox Code Playgroud)
第二点很明显——它是随叫随到执行的。
| 归档时间: |
|
| 查看次数: |
3251 次 |
| 最近记录: |