lambda - 为什么在 Kotlin 中将变量传递给 lambda 有效?
问题描述
假设我有接受 lambda 作为参数的高阶函数,如下所示:
fun getNum(op: () -> Int) = op()
还有一个返回数字的函数:
fun getTen() = 10
在主函数中,我可以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 中的最后一个或单个表达式是返回值。
在getNum { x }
表达式中,{ x }
是一个带有单个表达式的 lambda,x
因此被视为返回值,因此当调用 lambda 时,它只计算闭包x
中捕获的值并将其值返回给.getNum
反过来getNum(::getTen)
,调用是可调用引用的使用(可通过符号区分::
),它可以作为函数类型的值传递,() -> Int
就像它是一样的getNum { getTen() }
。
请参阅:语言参考中的Lambda 表达式和匿名函数。
推荐阅读
- yocto - Yocto部署文件夹中的符号链接有什么用
- wordpress - 使用多个 wp 主机时,AWS 上的 Wordpress 站点无法正确连接到数据库
- vue.js - 为什么我们需要 vuex 而不仅仅是简单的全局对象
- r - R编程中的特征函数
- python-3.x - 如何在文本文件中的特定位置附加字符串
- android - 我的 android studio 没有从 3.5 更新到 3.6 版本
- python - 操作一个大文件python
- swiftui - @State var 不起作用,但非 State 变量起作用
- javascript - 你如何调用在javascript中的数组中创建的对象的函数?
- node.js - 通过 Heroku 部署 Rails 应用程序使用旧版本的 Node