let 操作符和 run 操作符区别
let 操作符和 run 操作功能类似,只是 let 操作符,对应传入的 Lambda 表达式不是 T 的扩展函数,而第一个参数是 T 类型,且传入了作用域对象。
apply 操作符
apply 操作的的功能,对应 Lambda 表达式是作用域对象的扩展函数,返回值是作用域对象本身(注意这里哦,前面讲的 run 和 let 返回值都是 Lambda 表达式的返回值)。
also 操作符
also 操作符的的功能,对应 Lambda 表达式的不是 T 的扩展函数,第一个参数是 T 类型(和 let 一样),返回值是 作用域对象 this (和 apply 一样)。
takeIf 操作符
判断 Lambda 表达式返回若为 ture,就会返回 this 对象,否则就是 null。
takeUnless 表达式
若 Lambda 表达式返回 false ,返回的是 this 对象,否则就是 null (与 takeIf 相反),大家自行理解吧。
https://www.wenyingzhi.com/mu-lu/zuo-yong-yu-han-shu
我们来总结下 Lambda 的几个特点吧!
Lambda 表达式的最后一句代码的返回值是表达式的返回值
若 Lambda 的参数只有一个,可以不用定义,使用 it 代替。
可以通过 (类型1,类型2)->返回值 直观快速的定义 FunctionX 的类型。
Lambda 的最终会编译成一个实现 FunctionX 的接口类,并存在一个静态对象。
若函数最后一个参数是一个 Lambda 表达式,可以将 Lambda 定义写在括号外面。若函数的参数只有一个 Lambda 表达式,括号都不用写了。
一个函数行参是一个接口且接口只有一个方法,可以直接传递一个 lambda 表达式
当一个 Lambda 有很多参数,若我们都用不到这些参数,无需给其定义名字,用 _ 代替即可。