Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Kotlin中将变量传递给lambda会起作用?_Lambda_Kotlin - Fatal编程技术网

为什么在Kotlin中将变量传递给lambda会起作用?

为什么在Kotlin中将变量传递给lambda会起作用?,lambda,kotlin,Lambda,Kotlin,假设我有一个接受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}

假设我有一个接受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
}
fun main(args:Array){
val x=50
val a=getNum(::getTen)//a==10
val b=getNum{x}//这是有效的,b==50
}

为什么传递一个变量而不是lambda有效?有什么想法吗?谢谢。

在Kotlin中,lambda中的最后一个或单个表达式

getNum{x}
表达式中,
{x}
是一个lambda,其中包含一个表达式
x
,因此该表达式被视为返回值,因此当调用lambda时,它只计算在中捕获的
x
,并将其值返回给
getNum

getNum(::getTen)
调用是a的用法(可通过
::
符号区分),它可以作为函数类型
()->Int
的值传递,就像它是
getNum{getTen()
一样

请参阅:在语言参考中