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

疯狂Java联盟

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

[Android] Kotlin局部函数

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

本文节选自《疯狂Kotlin讲义》
前面所看到的函数都是在全局范围内定义的函数,它们都是全局函数。Kotlin还支持在函数体内部定义函数,这种被放在函数体内定义的函数称为局部函数。
在默认情况下,局部函数对外部是隐藏的,局部函数只能在其封闭(enclosing)函数内有效,其封闭函数也可以返回局部函数,以便程序在其他作用域中使用局部函数。
程序清单:codes/06/6.4/LocalFunctionTest.kt
// 定义函数,该函数的返回值类型为Int
fun getMathFunc(type: String , nn: Int) : Int {
         // 定义一个计算平方的局部函数
         fun square(n: Int) : Int {  //
                   returnn * n
         }
         // 定义一个计算立方的局部函数
         fun cube(n: Int) : Int {  //
                   returnn * n * n
         }
         // 定义一个计算阶乘的局部函数
         fun factorial(n: Int) : Int {  //
                   varresult = 1
                   for(index in 2 .. n) {
                            result*= index
                   }
                   returnresult
         }
         when(type){
                   //调用局部函数
                   "square"-> return square(nn)
                   "cube"-> return cube(nn)
                   else-> return factorial(nn)
         }
}
fun main(args: Array<String>) {
         println(getMathFunc("square",3)) // 输出9
         println(getMathFunc("cube",3)) // 输出27
         println(getMathFunc("",3)) // 输出6
}
上面程序中第一行粗体字代码定义了getMathFunc()函数的返回值类型Int,接下来程序的①、②、③号粗体字代码定义了3个局部函数,而getMathFunc()函数则根据参数选择调用不同的局部函数。
如果封闭函数没有局部函数返回出来,那么局部函数将只能在封闭函数内部调用,如上程序所示。
另外还会出现一种情况,如果封闭函数将局部函数返回出来,且程序使用变量保存了封闭函数的返回值,那么这些局部函数的作用域就会被扩大,因此程序完全可以自由地调用它们,就像它们都是全局函数一样。
下一节我们先介绍函数类型,然后就会介绍函数返回函数的情况。

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

本版积分规则

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

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

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

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