kotlin之lambda表达式和匿名函数

lambda表达式,称为匿名函数,是一种函数字面值,也就是没有声明的函数,但可以作为表达式传递出去.


函数类型:

对于接受另一个函数的作为自己的参数,必须针对这个参数指定一个函数的类型如

fun <T>max(collection: Collection<T>,less:(T,T)->Boolean):T?{
    var max :T?=null
    for (it in collection){
        if (max==null ||less(max,it))
            max=it
    }
    return max
}

参数less的类型(T,T)->Boolean ,也就是说,它是一个函数,接受二个T类型的参数,并且返回一个Boolean类型的结果


lambda表达式语法

 val sun = { x: Int, y: Int -> x + y }

表达式包含在大括号之内,在完整的语法形式中,参数声明在小括号中,参数类型可选,函数体在->符合之后,如果lambda表达式自动推断的返回值类型不是Unit,那么在lambda表达式函数体中,最后一条表达式的值会被当做整个lambda表达式的返回值


匿名函数

ints.filter(fun(item)=item >0)

对于匿名函数,返回值类型的自动推断方式与通常函数的一样,如果函数体是一个表达式,那么返回值类型可以推断得到,如果函数体是多条语句组成的代码段,则返回值类型必须明确指定

注意:匿名函数参数一定在小括号内传递,允许将函数参数写在小括号之外的语法,仅对lambda表达式有效.


闭包

 var sum = 0
    ints.filrter(it>0).forEach(
            sum+=it
    )
    print(sum)

lambda表达式匿名函数可以访问它的闭包,也就是定义在外层范围的变量.,

原文地址:https://www.cnblogs.com/loaderman/p/10143717.html