一、函数复合的概念
f(g(x))
二、看一些小例子
package net.println.kotlin.chapter5.compose
/**
* @author:wangdong
* @description:
*/
/**定义两个函数*/
val add5 = {i: Int -> i + 5} //加5
val multiplyBy2 = {i: Int -> i * 2} //乘2
fun main(args: Array<String>) {
println(multiplyBy2(add5(8))) //(5 + 8) * 2
val add5AndMultiplyBy2 = add5 andThen multiplyBy2
val add5ComposeMutiplyBy2 = add5 compose multiplyBy2
println(add5AndMultiplyBy2(8)) //m(x)= f(g(x))
println(add5ComposeMutiplyBy2(8)) //m(x) = g(f(x))
}
/**定义一个复合函数*/
/**
* p1、p2是参数
* R是返回值
* andThen拓展函数
* 参数:Function1<P2,P2>,第一参数是参数类型,第二个参数是返回值类型
* 返回值:Function1<P1,R>
* infix中缀表达式
*/
infix fun <P1,P2,R> Function1<P1,P2>.andThen(function: Function1<P2,R>): Function1<P1,R>{
//进行复合
//返回了一个函数
return fun (p1: P1):R{
//函数里面function.invoke把这个function又调用了一遍
//然后又把自己的返回值传给了上去
return function.invoke(this.invoke(p1))
}
}
infix fun <P1,P2,R> Function1<P2,R>.compose(function: Function1<P1,P2>):Function1<P1,R>{
return fun (p1: P1):R{
return this.invoke(function.invoke(p1))
}
}
输出的结果
26
26
21