为什么在Kotlin中将变量传递给lambda有效?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在Kotlin中将变量传递给lambda有效?相关的知识,希望对你有一定的参考价值。

假设我有高阶函数接受lambda作为参数,如下所示:

fun getNum(op: () -> Int) = op()

还有一个返回数字的函数:

fun getTen() = 10

在main函数中,我可以像这样调用getNum()函数

fun main(args: Array<String>){
    val x = 50
    val a = getNum(::getTen)    // a == 10
    val b = getNum{x}           // this works and b == 50
}

为什么传递变量而不是lambda有效?任何的想法?谢谢。

答案

在Kotlin中,lambda is the return value中的最后一个或单个表达式。

getNum { x }表达式中,{ x }是一个lambda,其中包含单个表达式x,因此被认为是返回值,因此当调用lambda时,它仅评估x中捕获的closure并将其值返回getNum

反过来,getNum(::getTen)调用是callable reference的使用(它可以通过::符号区分),它可以作为函数类型() -> Int的值传递,就像它将是getNum { getTen() }一样。

请参阅:语言参考中的Lambda Expressions and Anonymous Functions

以上是关于为什么在Kotlin中将变量传递给lambda有效?的主要内容,如果未能解决你的问题,请参考以下文章

如何在kotlin中将lambdas与函数式接口一起使用并直接将lambda分配给var

如何在 RxJava 2 和 Kotlin 中将 null 传递给具有可空类型的 Observable

在 Kotlin 中将值从 Activity 传递到 Fragment

如何在RxJava 2和Kotlin中将null传递给具有可空类型的Observable

在 Kotlin Android 中将值传递给函数时进行编译时间检查

如何将 AWS 区域传递给 lambda 函数?