重要的事情说一遍,方法也是一个对象
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~~~~~~~~~~
1
2
3
4
5
6