频道栏目
首页 > 资讯 > 其他 > 正文

什么是Lambdas

17-06-19        来源:[db:作者]  
收藏   我要投稿

什么是Lambdas

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

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

fun hehe(action: () -> Int) :Int{
    return action()
}
///////调试///////////
fun main(args: Array) {
    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  List.map(transform: (T) -> R): List {
    val result = arrayListOf()
    for (item in this)
        result.add(transform(item))
    return result
}
//////////调试/////////////
val ints = arrayListOf
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中的匿名类)

相关TAG标签
上一篇:c语言学习笔记
下一篇:RunLoop总结:RunLoop 与GCD 、Autorelease Pool之间的关系
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站