为什么在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