当前位置:嗨网首页>书籍在线阅读

19-匿名函数

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.4.3 匿名函数

在大多数情况下,Lambda表达式是不需要指定函数的返回类型的,因为可以自动推断。如果需要显式指定函数的返回类型,则可以使用匿名函数。

fun(x: Int, y: Int): Int = x + y    //声明一个匿名函数,用表达式来代表函数体

所谓匿名函数,就是无须定义函数名称的函数,其他的部分和普通函数定义语法一样,其函数体可以是表达式,也可以是多条语句组成的代码块。简而言之,匿名函数就是普通函数省略其名称而得到的。

fun(x: Int, y: Int): Int {    //声明一个匿名函数,用代码块来代表函数体
    return x + y
}

参数和返回值类型的声明与普通函数一样,但如果参数类型能够从上下文推断得到,则可以省略。

val ints= setOf("Kotlin","Java","Scale")
ints.filter(fun(item) = item.equals("Kotlin"))

匿名函数的返回值类型推断机制与正常函数一样:如果匿名函数的函数体是一个表达式,那么匿名函数将自动推断出返回值类型;如果匿名函数的函数体是多条语句组成的代码块,则必须显式指定返回值类型,否则其返回值类型为Unit。

同时,匿名函数参数总是在括号内传递,允许将函数写在括号之外的语法仅适用于Lambda表达式。

除了以上提到的显式指定函数的返回值类型以外,Lambda表达式和匿名函数的另一个区别是,Lambda表达式中的return语句从包含它的函数中直接返回,而匿名函数中的return语句从匿名函数自身返回。