先来看看什么是Lambdas

跟上一篇一样,本文的目的是记录自己的学习过程,以免“日后”忘了自己看过什么。在了解Lambdas表达式之前,我们需要先了解另外一个叫高阶函数的东西。

高阶函数,名字看起来挺能唬人的,其实就是把函数作为参数的函数,看看栗子就明白了:

fun hehe(action: () -> Int) :Int{
    return action()
}
///////调试///////////
fun main(args: Array<String>) {
    println(hehe{ 2*3})
}
///////输出///////////
6

可以看到,hehe()是一个函数,hehe()中的参数是另一个函数,这个函数的名叫action,action是一个无参且返回类型为Int的函数,这就是一个简单的高阶函数。

上面的栗子中,hehe{2*3}就是一个Lambdas表达式,先来看看Lambdas表达式的定义:

1. A lambda expression is always surrounded by curly braces,
2. Its parameters (if any) are declared before -> (parameter types may be omitted),
3. The body goes after -> (when present).
/////////////翻译过来//////////
1.一个Lambdas表达式是被{}所包围的语句块
2.Lambdas表达式的参数是在 ->前面声明的(参数的类型可以被省略)
3.Lambdas表达式的代码块(函数的具体实现)是放在 ->后面的

再来看一个牛逼(复杂)点的Lambdas表达式(map函数):

fun <T, R> List<T>.map(transform: (T) -> R): List<R> {
    val result = arrayListOf<R>()
    for (item in this)
        result.add(transform(item))
    return result
}
//////////调试/////////////
val ints = arrayListOf<Int>
val doubled = ints.map { it -> it * 2 }
//it可以代替表示List中的元素

map函数作用于List,它的参数是泛型T,它返回一个泛型R。map的作用是将一个参数泛型为T的List转换为一个参数泛型为R的List,在map的实现代码块中,先声明一个参数泛型为R的List(这个List是最终作为返回结果的List),然后在for循环里面,迭代this (this即为调用map方法的List) ,通过transform将参数泛型为T的List转换为参数泛型为R的List。

其实Lambdas表达式就是一个匿名的函数(可以类比Java中的匿名类)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值