为什么在Kotlin中将变量传递给lambda会起作用?
假设我有一个接受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}
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()
一样
请参阅:在语言参考中