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

疯狂Java联盟

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

[Android] 使用Lambda表达式代替局部函数——Lambda表达式之二

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

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

如果使用Lambda表达式表达式来简化LocalFunctionTest.kt,则可以将程序改写成如下形式。
程序清单:codes/06/6.6/LambdaTest.kt
// 定义函数,该函数的返回值类型为(Int)-> Int
fun getMathFunc(type: String) : (Int) -> Int {
         // 该函数返回的是Lambda表达式
         when(type){
                   "square" ->return {n: Int ->  //
                                     n * n
                            }
                   "cube" -> return{n: Int ->  //
                                     n * n * n
                            }
                   else -> return {n: Int->  //
                                     var result= 1
                                     for ( indexin 2..n ){
                                               result*= index
                                     }
                                     result
                            }
         }
}
fun main(args: Array<String>) {
         // 调用getMathFunc(),程序返回一个(Int)->Int类型的函数
         varmathFunc = getMathFunc("cube") // 得到cube函数
         println(mathFunc(5))// 输出125
         mathFunc= getMathFunc("square") // 得到square函数
         println(mathFunc(5))// 输出25
         mathFunc= getMathFunc("other") // 得到factorial函数
         println(mathFunc(5))// 输出120
}
将上面3段粗体字代码中return后面的部分与LocalFunctionTest.lt中的square()、cube()、factorial()局部函数的代码进行对比,不难发现定义Lambda表达式与局部函数的代码几乎是一样的。定义Lambda表达式与局部函数只是存在如下区别。
q     Lambda表达式总是被大括号扩着。
q     定义Lambda无须fun关键字,无须指定函数名。
q     形参列表(如果有的话)在 -> 之前声明,参数类型可以省略。
q     函数体(Lambda表达式执行体)放在->之后。
函数的最后一个表达式自动被作为Lambda表达式的返回值,无需使用return关键字。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

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

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

GMT+8, 2019-8-24 21:15 , Processed in 0.138592 second(s), 6 queries , File On.

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