请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 523|回复: 0

[Android] Lambda表达式的脱离——回顾局部函数——Lambda表达式之三

[复制链接]
发表于 2017-11-28 11:51:29 | 显示全部楼层 |阅读模式
本帖最后由 kongyeeku 于 2018-2-1 23:19 编辑

本文节选自《疯狂Kotlin讲义》

作为函数参数传入的Lambda表达式可以脱离函数独立使用。例如如下程序。
程序清单:codes\06\6.6\EscapeTest.kt
// 定义一个List类型的变量,并将其初始化为空List
var lambdaList = java.util.ArrayList<(Int) -> Int>()
// 定义一个函数,该函数的形参类型为函数
fun collectFn(fn : (Int) -> Int ) {
        // 将传入的fn参数(函数或Lambda表达式)添加到lambdaList集合中
        // 这意味着fn将可以在collectFn范围之外使用
        lambdaList.add(fn)
}
fun main(args: Array<String>) {
        // 两次调用collectFn()函数,将会向lambdaList中添加元素(每个元素都是Lamda表达式)
        collectFn({it * it})
        collectFn({it * it * it})
        // 输出lambdaList的长度
        println(lambdaList.size)
        // 依次调用lambdaList集合的元素(每个元素都是Lamda表达式)
        for( j in lambdaList.indices ) {
                println( lambdaList[j](j + 10) )  // ①
        }
}
上面程序中定义了一个collectFn()函数,该函数带一个函数类型的形参,collectFn()函数内部只是将传入的fn参数添加到lambdaList集合中,这意味着程序接下来可通过lambdaList集合访问传给collectFn()函数的Lambda表达式——程序中①号粗体字代码正是通过 lambdaList集合元素来访问Lambda表达式的。
从上面程序可以看出,把Lambda表达式作为参数传给collectFn()函数之后,这些Lambda表达式可以脱离collectFn()函数使用。

您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

视频、代码、电子书下载
请关注"疯狂图书"公众号
QQ交流1群: 545923995  未满
微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2019-1-17 16:37 , Processed in 0.282692 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表