匿名函数
上述内容遗漏的就是指定函数返回值类型。在大多数情况下,这是非必须的。因为返回值类型可以自动的识别出。然而,如果你确实要显示的指定,你可以使用可供替代的方案:匿名函数。
fun(x: Int, y: Int): Int = x + y
一个匿名函数很像正常的函数申明,除了其没有名字。匿名函数的主体可以是一个表达式或者代码块:
fun(x: Int, y: Int): Int {
return x + y
}
参数和返回类型的指定和正常的函数申明一致,如果参数的类型可以被推断出来,那么参数的类型也可以省略。
ints.filter(fun(item) = item > 0)
返回类型的推断和正常函数一致:返回类型根据只有一个表达式的匿名函数自动推断,如果是代码块中需要显示的指定返回类型,或者指定为Unit。
需要注意的是,匿名函数参数总是在括号中被传递。仅仅是lambda表达式中可以允许参数从括号外传入。
lambda表达式和匿名函数的另一个不同就是non-local returns。未使用标签的return语句总是返回使用关键字fun定义的函数。这意味着在lambda表达式中的return会返回封闭函数,然而匿名函数中的return将会返回匿名函数本身。