重要的事情说一遍,方法也是一个对象
lambda 是什么 ? 匿名函数 .(其底层还是通过invokedynamic指令来生成匿名类来实现。)
为什么要lambda ? 好看 ,简洁.还有呢 ,带来了闭包
在kotlin中 ,函数能作为参数使用
匿名函数 ,它是函数,需要被调用才能起作用(或者需要被回调 一个意思)
细说 Kotlin 的 Lambda 表达式https://juejin.im/entry/58a382da61ff4b0058ab4542
Lambda 表达式,早学早理解https://juejin.im/entry/59b8a8445188256c651e819c
Kotlin——高级篇(一):Lambda表达式详解https://juejin.im/post/5ab9a5ccf265da239f076284
Lambda和匿名函数它们有什么不一样呢?答案是,没有任何不同的地方。在JVM的角度来说,它们是一模一样的。无论是Java8还是Kotlin甚至是所有运行在JVM平台上的语言,它们的原理都是一样的,Lambda表达式只是匿名函数的一种高糖写法。那么什么样的匿名函数能用Lambda呢?答案是:只有一个方法的接口,也可以说是只有一个方法的匿名函数。

//既然他能作为参数使用,就能当做变量被 定义val lambda = {left: Int, right: Int->left + right}println(lambda(2, 3))等价println(lambda.invoke(2,3))
(handler: RepositoryHandler) -> Unit(没有返回值) 定义格式it 约定的默认参数val addRepos: (handler: RepositoryHandler) -> Unit = {it.google()it.jcenter()}
闭包
Dart 的闭包和 JS、python 一个意思,是定义在方法里面的方法,其特性:
- 闭包是一个对象
- 闭包定义在其他方法内部
- 闭包可以访问外部方法的布局变量,并持有其状态。这是闭包的最大用途,通过闭包的方式把一个方法内部的属性暴露出去,因为方法是可以返回方法的,Dart 中方法也是对象一样可以当做返回值处理
结果是不会骗人的,大家就把闭包看成是一个包含外层数据的匿名实现类,当成对象看就好理解了,这是最经典的一个例子
// 闭包sum(){var num = 0;sum2(){num++;print(num);}return sum2;// 也可以这么写,匿名的方式用的最多return (){num++;print(num);};}// 多调用闭包几次void main(){Function a = sum();a();a();a();a();a();a();}~~~~~~~~~~log~~~~~~~~~~123456
