【31】kotlin 函数复合
发布日期:2021-05-07 18:51:30 浏览次数:20 分类:精选文章

本文共 1794 字,大约阅读时间需要 5 分钟。

code

package com.yzdzy.kotlin.chapter5.componse//求f(g(x))// 如果m(x)=f(g(x))//那么 m就是fgx的复合val add5 = { i: Int -> i + 5 }val multiplyBy2 = { i: Int -> i * 2 }//复合函数infix fun 
Function1
.andThen(function: Function1
): Function1
{ return fun(p1: P1): R { return function.invoke(this.invoke(p1)) }}fun main(args: Array
) { //(5+8)*2 val res = multiplyBy2(add5(8)) println(res) //复合后 val and5AndMultiplyBy2 = add5 andThen multiplyBy2 println(and5AndMultiplyBy2(8))}

哦 好tm的复杂

我们来简单解析一下

//拆解上面一下/*p1 p2 代表参数R代表返回值p1 8p2 add5的返回值* andThen 是扩展方法。扩展的方法1* infix 是中缀表达式,不用点也不用括号* Function1  代表传入一个参数的函数 
p1代表参数类型 p2代表返回值类型* andThen 后面的 Function1
代表 multiplyBy2** */

还有一种

compose写法
package com.yzdzy.kotlin.chapter5.componse//求f(g(x))// 如果m(x)=f(g(x))//那么 m就是fgx的复合val add5 = { i: Int -> i + 5 }val multiplyBy2 = { i: Int -> i * 2 }//复合函数infix fun 
Function1
.andThen(function: Function1
): Function1
{ return fun(p1: P1): R { return function.invoke(this.invoke(p1)) }}//拆解上面一下/*p1 p2 代表参数R代表返回值p1 8p2 add5的返回值* andThen 是扩展方法。扩展的方法1* infix 是中缀表达式,不用点也不用括号* Function1 代表传入一个参数的函数
p1代表参数类型 p2代表返回值类型* andThen 后面的 Function1
代表 multiplyBy2** */infix fun
Function1
.compose(function: Function1
):Function1
{ return fun(p1:P1):R{ return this.invoke(function.invoke(p1)) }}fun main(args: Array
) { //(5+8)*2 val res = multiplyBy2(add5(8)) println(res) //复合后 val and5AndMultiplyBy2 = add5 andThen multiplyBy2 //m(x) = f(g(x)) println(and5AndMultiplyBy2(8)) val and5ComposeMultiplyBy2 = add5 compose multiplyBy2 //m(x) = g(f(x)) println(and5ComposeMultiplyBy2(8))}

26

26
21
 

上一篇:【32】kotlin 科理化(Currying) 函数调用链
下一篇:【30】kotlin 闭包

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月18日 06时34分12秒