函数复合
//f(g(x)) m(x) = f(g(x))
val add5 = {i: Int -> i + 5} // g(x)
val multiplyBy2 = {i : Int -> i * 2} // f(x)
fun main(args: Array<String>) {
println(multiplyBy2(add5(8))) // (5 + 8) * 2
val add5AndMultiplyBy2 = add5 andThen multiplyBy2
val add5ComposeMultiplyBy2 = add5 compose multiplyBy2
// P1 = 8; P2:add5的返回值
println(add5AndMultiplyBy2(8)) // m(x) = f(g(x))
println(add5ComposeMultiplyBy2(8)) // m(x) = g(f(x))
}
// infix 中缀表达式,Function1一个参数
// Function1<P1, P2>.andThen()扩展方法,P1参数类型,P2返回值类型
infix fun <P1, P2, R> Function1<P1, P2>.andThen(function: Function1<P2, R>): Function1<P1,R>{
return fun(p1: P1): R{
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))
}
}
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .